連載コラムへ
kitchen21<Perlの話>
北東海大電算室内


いつもと違うチキン21番会員

本職で駆使されているPerlのお話

Perl でどうでしょう。

 

Perl は、プログラム言語です(たぶん)。

そして色々な OS上(LinuxとかMacOSとかWindowsとか...)で利用できるようです。

Yahoo! Japan などの検索サイトで perl をキーワードにして検索すると色々引っかかります。

関連書籍も沢山あります。例えば、ライリー・ジャパンの「らくだ本」があります。

http://www.oreilly.co.jp/index.htm

例えば、こんな感じ

 

さて、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生成器」に原稿をほーり込むと、ひょいと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として不適切となります。

本来ならば、空白文字や < 、> などを &nbsp; や &lt; 、&gt; などに変換するなどの配慮が必要なのです。

エスケープするとか、安全なコードにするなどと表現するのですが、この処理をしていないです。

 

2) この原稿自体に例文として「kitchen21文法」のデータが含まれている。

なにせ、この原稿自体のkitchen21用の例文そのものを処理してしまうのです。

つまり、理由1) の様な配慮を 「kitchen21文法」 用にも施す必要があるのです。

対処方は、あります。例文の各行の先頭(1桁目)に空白などを入れておけば、良いのです。

 

3) 場合によっては、漢字コードへの対応が必要です。

複数の漢字コード(JISとか、SJISとか、EUC-jpとか)を埋め込んだ1枚のHTMLを扱うのは、なにかと面倒です。

生成されるモノの漢字コードを統一すると無難と思われます。

でもメールの本文として管理人さんへ送る場合には、おおかた大丈夫です。

賢いメールソフトが、この辺りを処理しています。

 

とは言え「わたくし用のツール」ですから、その癖を理解して使えば良いのです。

 

あ、もう一言。

今回の様なHTML生成ツールは、インターネットで調べると沢山あります(と思います)。

「こんなツール欲しいなぁ」と思った時は、まずは探した方が良いです。

なるべく「車輪を再発明」しない方が良いかも。

 

でも、ちょこちょこと作ってしまう。チキン21番です。

ではでは