Perl Perl_2
Perl 「 モジュール 」 CGI.pm CGI::Pretty を試す (0xf3)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0xf3 回。
CGI.pm で改行やインデントを自動で付加してくれるサブクラス「 CGI::Pretty 」を試す。
CGI::Pretty
モジュール「 CGI::Pretty 」は、Brian Paulsen という開発者が開発した、自動改行およびインデントのためのモジュールです。
CGI::Pretty は、CGI.pm の「 サブクラス 」であることからこの名称になっている様です。
サブクラス
「 サブクラス 」( subclass ) というのは、オブジェクト指向プログラミング ( object oriented programing ) で、あるクラスの機能 ( 具体的にはプロパティやメソッド ) を継承しつつ、追加機能を実装したクラスを意味します。
つまり、CGI::Pretty は、CGI.pm の機能を継承しつつ、自動改行やインデントといった追加機能を実装しているクラス ( モジュール ) です。
CGI::Pretty を利用する
CGI::Pretty は、use プラグマ行で「 CGI 」の代わりに「 CGI::Pretty 」を指定するだけで利用出来ます。とても簡単です。
use warnings;
use strict;
# use CGI;
use CGI::Pretty;
その効果は、コマンドラインでプログラムを実行すると良く分かります。前回確認したものと同じプログラムを実行してみます。結果は次の通りです。
Content-Type: text/html; charset=euc-jp
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<title>HTML escape</title>
<link rel="stylesheet" type="text/css" href="./style/style00.css" />
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
</head>
<body>
<h3>
HTML 出力の確認
</h3>
<h4>
テキスト
</h4>
<div class="test_txt">
<form method="post" action="http://localhost" enctype="multipart/form-data"><p>
<input name="usr_name" type="text" value="" size="40" />
</p>
<p>
<input name="submit" type="submit" value="submit" />
</p>
</form></div>
<h4>
param() のみ
</h4>
<div class="test_txt">
<p />
</div>
<h4>
escapeHTML() で処理
</h4>
<div class="test_txt">
<p>
</p>
</div>
</body>
</html>
「 body 」要素内の各要素に、改行とインデントが自動で追加されています。
CGI::Pretty のカスタマイズ
CGI::Pretty は、標準で「 a 」要素と「 pre 」要素は整形しません。なぜならば、Web ページd意図された構成を乱すおそれがあるからです。
こうした整形除外対象になる要素は、CGI::Pretty に用意された特別な配列を使って、任意に追加出来ます。
カスタマイズ 整形対象から要素を除外する
専用の特別な配列の名前は「 @CGI::Pretty::AS_IS 」です。設定は次の様に行います。
push @CGI::Pretty::AS_IS, qw( div, h4 );
これで、「 div 」要素と「 h4 」要素が CGI::Prety の整形対象から除外されます。
カスタマイズ インデント
CGI::Pretty のインデントは、通常タブストップ 1 つ分に設定されていますが、変数 $INDENT を設定することで、任意に指定出来ます。
# 半角空白 2 つ
$CGI::Pretty::INDENT = " ";
# タブ 2 つ
$CGI::Pretty::INDENT = "\t\t";
カスタマイズ 改行
CGI::Pretty の改行は、通常 1 つだけですが、変数 $LINEBREAK を設定することで、改行数を任意に指定出来ます。
# 2 つの改行
$CGI::Pretty::LINEBREAK = "\n\n";
CGI.pm に合わせる
CGI::Pretty を利用しつつ CGI.pm 標準の整形を利用する場合は次の様に指定します。
$CGI::Pretty::INDENT = $CGI::Pretty::LINEBREAK = "";
プリティ
英単語で「 pretty 」と聞くと、「 かわいらしい 」というイメージを持ってしまいまいしたが、実際には様々な「 良い 」という意味を持っていて、その中に「 きれいにする 」という意味を持っていることを知りました。
他には「 とても 」や「 巧み 」「 上手い 」といった意味もあるそうです。
0xf3 -> 0xf4 へ
次回より、HTML フォームの作成方法を確認します。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)