11←  home  →13
12 1999年7月18日

Perlは楽しいの巻

今回から右上にリンクつきました。過去の雑記にも全部付けたから、常連のお客さん以外には分からないかもしれないですが、今回が初めてです。

ページ開設当初からアイデアとしてはあったんですが、なんせ、面倒。技術的には、なんということもなく、
 
 
<div align=right><font color="#3366FF"><a href="zakki_011.html">11</a>←&nbsp;
→<a href="zakki_013.html">13</a></font></div>

というのを、毎回、該当個所を書き換えていけばそれでOK。OKなんだが、忘れたりミスタイプしたり、で一番丁寧には、最新版の段階では次のリンクはないんだから、今回なら11←のとこだけで、雑記(13)を書いた段階で→13を付け加える・・・もう・・・・あ〜あ。

といいうことで、これまでのような構成になってました。(もちろんこの12回が最初にアップされた時点では13をクリックしても13はないよといわれます、あしからず。これは許して下さい。企業のサイトなら許されない仕様とも思いますが、なんせ、そこまでやったら煩雑でしかたない・・・)

(あ、ところでMacの人にも←や→の矢印が見えてますよね。シフトJISどうしだから大丈夫だとは思うんだが・・・。もし見えなかったら教えて下さい。)
 

で。と。

面倒な定型処理はパソコンが得意。ということで、Perlで出来ないかなあ?と思ってちょこちょこやってみたら簡単に出来ました。

うれしいっちゃ!

自分のマシンにある「ホーム」から「雑記生成」っていうリンク押すします。
 
雑記ウィザード


番号:半角



 

と、上の画面が出ます。番号のとこに12って入れて「書き込む」をクリックすると
 

OK

zakki_012.html が生成されました。

って表示されます。

これで、さみだれ雑記のロゴの番号を12にして、11と13へ行くリンクをつけて、新しいzakki_012.htmlというファイル名にして保存してくれます。(^_^)V   (う、絵文字を使ってしまった・・・・) あとは、本文を書いていけば出来上がり。
 

どうやってるかの解説といっても、まだ「Perlのお勉強(2)」(ほぼ完成)は手元にあるだけでアップしてなかったのだった。けどまあ、ずうずうしくプログラムのせちゃおかな。
 
 
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
   <meta name="GENERATOR" content="Mozilla/4.6 [ja] (Win98; I) [Netscape]">
   <title>zakki wizzard</title>
</head>
<body text="#000000" bgcolor="#CCCCCC" link="#0000EE" vlink="#551A8B" alink="#FF0000" onLoad="document.form.number.focus()">
<font color="#990000"><font size=+3>雑記ウィザード</font></font>
<p>
<hr>
<p><form NAME="form" ACTION="zakki_w.cgi" METHOD="post">番号:半角
<br><input TYPE="text" SIZE=10 NAME="number">
<p><input TYPE="submit" VALUE=" 書き込む "><input TYPE="reset" VALUE=" 取り消す "></form>
<hr>
</body>
</html>

こっちが数字入力画面のzakki_w.htmlファイル。ポイントは

<p><form NAME="form" ACTION="zakki_w.cgi" METHOD="post">番号:半角
<br><input TYPE="text" SIZE=10 NAME="number">
<p><input TYPE="submit" VALUE=" 書き込む "><input TYPE="reset" VALUE=" 取り消す "></form>

ってとこだけです。くわしい解説は「勉強2」で・・・。ここで、numberが12だという情報が、zakki_w.cgiに送られます。それがこれ:
 
 
#########
# 設定部分

# ↓漢字ライブラリ jcode.pl のファイル名
$jcodelib   = 'jcode.pl';
# ↓保存されるファイルの漢字コード('sjis' 'euc' 'jis' のいずれか)
$kanjicode  = 'sjis';
##########

# 漢字ライブラリの読み込み
require "$jcodelib";

# 初期化
&init_form($kanjicode);
 

# 情報の取得
$number  = $form{'number'};
$number0  =$number -1;
$number2  =$number +1;
$number_z  = $form{'number'};
 

# 半角を全角に置換する
$number_z =~ s/0/0/g;
$number_z =~ s/1/1/g;
$number_z =~ s/2/2/g;
$number_z =~ s/3/3/g;
$number_z =~ s/4/4/g;
$number_z =~ s/5/5/g;
$number_z =~ s/6/6/g;
$number_z =~ s/7/7/g;
$number_z =~ s/8/8/g;
$number_z =~ s/9/9/g;
 

# ファイルを開く
open (HTML, ">zakki_0$number.html");

# ファイルに出力
print HTML <<"end_of_html";
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
   <title>さみだれ雑記$number_z</title>
</head>
<body bgcolor="#F5F5DC">
<div align=right>
<font color="#3366FF"><a href=zakki_0$number0.html>$number0</a>←&nbsp;&nbsp;→<a href=zakki_0$number2.html>$number2</a></font></div>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" >
<tr><td ALIGN=CENTER VALIGN=CENTER WIDTH="60%" HEIGHT="50" BGCOLOR="#8080FF">
<font size=+3><font color="#FF80FF">さ
</font><font color="#66FF99">み
</font><font color="#FF80FF">だ
</font><font color="#FFFF00">れ
</font><font color="#00FFFF">雑
</font><font color="#FF80FF">記</font></font></td>

<td ALIGN=CENTER WIDTH="10%" BGCOLOR="#FF80FF"><font color="#FFFFFF"><font size=+3>$number_z</font></font></td>

<td ALIGN=RIGHT WIDTH="30%" BGCOLOR="#408080"><font color="#FFFFFF"><font size=+1>1999年7月18日</font></font></td>
</tr>
</table>
<br>
</body>
</html>
end_of_html

# ファイルを閉じる
close (HTML);

# ヘッダの送出
print "Content-type: text/html\n\n";
print "<h1>OK</h1>";
print "<h1>zakki_0$number.html が生成されました。</h1><br>";

# 終了
exit(0);

#
# 以下はサブルーチン
#
# フォームからの情報を連想配列 %form に入れる
# &init_form('euc');
sub init_form {
    local($query, @assocarray, $assoc, $property, $value, $charcode, $method);
    $charcode = $_[0];
    $method = $ENV{'REQUEST_METHOD'};
    $method =~ tr/A-Z/a-z/;
    if ($method eq 'post') {
        read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
    } else {
        $query = $ENV{'QUERY_STRING'};
    }
    @assocarray = split(/&/, $query);
    foreach $assoc (@assocarray) {
        ($property, $value) = split(/=/, $assoc);
        $value =~ tr/+/ /;
        $value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg;
        &jcode'convert(*value, $charcode);
        $form{$property} = $value;
    }
}
 

はじめてPerlのプログラム見る人は複雑な感じがするかもしれませんが、単純です。わたしに能力があれば、送られてくるデータが一つしかないんだから、「サブルーチン」なんか使わず、もっとスマートにできるはずなんですが、いかんせん、そんな能力はないということで、見る人が見たら笑われるかも知れないですが、限られた知識で強引にやりました。もっと力が付いたらまた改造しようということで・・・。(実は強引に2つのファイルを1つに纏めて、どうにか動くようにはしたのだが、それを公開するのはさすがに恥ずかしい。)

# ファイルを開く
open (HTML, ">zakki_0$number.html");

の部分を「とほほのWWW入門・Perl編」見ながら、試行錯誤でやりました。これも「基本」って部分でしょうが、参考書の例はすべて「存在するファイルを呼び出す」もの。ここでは存在しないファイルを作るってんで、ま、出来るんじゃないかな?で作ったら出来ちゃった。うれしい。

ここは、ファイルを「書き込み」で開くという意味です。
変数の使い方とかは、詳しい解説は「Perlのお勉強2」(3までいるかなあ?)のアップまで待って下さい。

あれ?結局、「できたぜ」って、ただ自慢するだけで終わっちゃったなあ。こりゃ更新連絡恥ずかしくて出来ないぞう・・・・・。

ということであえて連絡しないでおこう・・・。何のこっちゃ。
 

          


11←  home  →13