Perl は、プログラム言語です(たぶん)。 そして色々な
OS上(LinuxとかMacOSとかWindowsとか...)で利用できるようです。 Yahoo! Japan などの検索サイトで perl
をキーワードにして検索すると色々引っかかります。 関連書籍も沢山あります。例えば、ライリー・ジャパンの「らくだ本」があります。 さて、Perl
は、キーワード「CGI」との組で使われることが多いのですが、ここでは、お手軽な自前のツール作りとして利用してみます。 例えば、こんな感じです。 例1) 1から10までの整数の合計 $sum = 0; for( $i=1; $i<=10; $i++ ) { $sum = $sum + $i; } print( "$sum\n" ); 実行すると結果は、 55 です。 例2) 例1を少し改造して 10 まででなく max
までとする。例えば、max=21 とした場合。 $max = 21; $sum = 0; for( $i=1; $i<=$max; $i++ ) { $sum = $sum + $i; } print( "$sum\n"); 実行すると結果は、 231 となります。 現実味の薄い例でしたね。 電卓叩けば良いし、表計算ソフトでできるじゃん。 ならば、こんなのどぅでしょう。 例えば、テキストエディタで、ごにょ、ごにょと当サイトのコラム用原稿を書き、この「簡易HTML生成器」に原稿をほーり込むと、ひょいとHTML風のモノが出来上がる。 便利そうですよね。 自分しか使わないツールなので結果オーライのプログラムで良いわけだし... てなわけで、チキン21番のコラム用「お手軽HTML生成器」を考えてみました。 名前は、kitchen21 です。 一応、生成用の決まりを考えました。 1) 入力は 1行づつ、上から、そのまんま処理。 2) 1桁目から文字列「=N:なづけ」
があったら、HTMLのA要素のNAME属性用に「なづけ」 とする。 3) 1桁目から文字列「=T:ほげほげ」
があったら、タイトル「ほげほげ」とする。 4)
1桁目から文字列「=L:あちら」があったら、HTMLのA要素のHREF属性用に「あちら」 とする。また、テキストも「あちら」とする。 5)
上記以外だったら文書とみなす。空文も1行とみなす。 例えば、以下の原稿の場合。 --ここから原稿-- =N:020 =T:複写機でチケット販売サービス チキン21番です。 こんな記事を目にしました。 セブンイレブンが複写機でチケット販売サービス =L:http://www.jij.co.jp/news/service/art-20021028221514-IGYFCMNNLD.nwc なんじゃろぅ。と思いつつ立ち寄ってみました。 むむ。これってサービスを売ってるんですよね。 ではでは --ここまでが原稿-- kitchen21
で処理すると、以下の様なHTMLの一部分を出力さたい。 --ここからが出力例-- <tr><td><a
name=020>複写機でチケット販売サービス</a></td></tr> <tr><td><p>チキン21番です。<br> こんな記事を目にしました。<br> <br> セブンイレブンが複写機でチケット販売サービス<br> <a
href="http://www.jij.co.jp/news/service/art-20021028221514-IGYFCMNNLD.nwc"> http://www.jij.co.jp/news/service/art-20021028221514-IGYFCMNNLD.nwc</a><br> <br> なんじゃろぅ。と思いつつ立ち寄ってみました。<br> むむ。これってサービスを売ってるんですよね。<br> ではでは<br> </p></td></tr> --ここまでが出力例-- そして、この出力されたHTMLの一部分を管理人さんへメールで送るわけです。 受取た管理人さんは、これをコラム用HTMLファイルへ追加するだけで良いわけです。 ヨサゲでしょう。 しかしながら、普通に管理人さんへ原稿を送った方が、もっと良い結果を得られます。 えー。ここでは、あくまでも Perl
の例題としてお考えください。 さて、この処理用の Perl
スクリプトですが、以下の様になります。 $id = (); while(<>) { chop; if( /^=N:/i ) { s/^=N://i; $id = $'; } elsif( /^=T:/i ) { s/^=T://i; print "<tr><td><a
name=$id>$_</a></td></tr>\n"; print
"<tr><td><p>"; } elsif( /^=L:/i ) { s/^=L://i; print "<a
href=\"$'\">$'</a><br>\n"; } else { print "$_<br>\n"; } } print "</p></td></tr>\n"; これが kitchen21 の全スクリプトです。 記号いっぱいで読むにはツライのですが、とりあえず、この分量で処理できます。 ねぇ、どうです。 Perl って面白そうでしょう? 利用してみたくなりませんかぁ。 Perl とは、無関係ですが、この kitchen21
には、致命的な欠陥があります。 なにせ「この原稿自体」を kitchen21
で処理した場合、HTML として利用できません。 大笑いの爆笑もんです。がはは。 使えない理由は、Perl
とは、まったく関係ありません。 理由を幾つかあげますと。 1) HTMLの文字実体参照の考慮がされていない。 この原稿の Perl
スクリプトのコードの箇所が、HTMLとして不適切となります。 本来ならば、空白文字や < 、> などを
や < 、>
などに変換するなどの配慮が必要なのです。 エスケープするとか、安全なコードにするなどと表現するのですが、この処理をしていないです。 2)
この原稿自体に例文として「kitchen21文法」のデータが含まれている。 なにせ、この原稿自体のkitchen21用の例文そのものを処理してしまうのです。 つまり、理由1) の様な配慮を 「kitchen21文法」
用にも施す必要があるのです。 対処方は、あります。例文の各行の先頭(1桁目)に空白などを入れておけば、良いのです。 3)
場合によっては、漢字コードへの対応が必要です。 複数の漢字コード(JISとか、SJISとか、EUC-jpとか)を埋め込んだ1枚のHTMLを扱うのは、なにかと面倒です。 生成されるモノの漢字コードを統一すると無難と思われます。 でもメールの本文として管理人さんへ送る場合には、おおかた大丈夫です。 賢いメールソフトが、この辺りを処理しています。 とは言え「わたくし用のツール」ですから、その癖を理解して使えば良いのです。 あ、もう一言。 今回の様なHTML生成ツールは、インターネットで調べると沢山あります(と思います)。 「こんなツール欲しいなぁ」と思った時は、まずは探した方が良いです。 なるべく「車輪を再発明」しない方が良いかも。 でも、ちょこちょこと作ってしまう。チキン21番です。 ではでは
いつもと違うチキン21番会員
本職で駆使されているPerlのお話