※ここの解説は、後になるほど省略されている場合がありますのでできるだけ順番に読んでください。
■ 7.テキストの一括表示
さあ、前回の「6.HTML形式の表示」を読まれた方は、もうCGIでホームページを表示する方法を身に付けたも同然です。
ところが、前回学んだ方法だと手直しが結構大変です。
10行程度ならいざ知らず、通常のホームページなら何十行あるいは、100行を超えるものは、ざらにあります。
これらをすべて前回習った方法で行おうとすれば大変な作業になりますし、1文字でも入力をミスすれば動かなくなる危険性があるわけです。
「だから、Perlって難しいんだ。」と思われたあなた半分あたっています。
確かに難しいのは事実ですが、その一方で、それを簡単にするテクニックを知らないからです。
では、前回と同じことを別の方法で行ってみましょう。
前回習ったことがウソのように簡単に実行できます。
「なぜ、最初にこの方法を教えないんだ」と思いますよね、それは
1.苦労を知らないでテクニックばかりを習っても、その便利さがわからない。
2.基本をマスターしないでテクニックを習っても、間違いに気付かない。
また、前回の方法は、print命令しかないから、手間はかかりますが、説明がシンプルですし、入力を間違えなければ実行結果が想像できます。
ところが、今回説明するようなテクニックは、作業を簡単にはしてくれますが、一歩間違えるととんでもない結果になったりします。
というような理由があるからです。
今回は、その便利なテクニックを2つ教えます。
■ ヒアドキュメントのサンプル
Perlにはヒアドキュメントといって表示したい文章をCGIの中に埋め込んでそれをそのまま表示する命令があります。
今回、この方法を使ってみましょう。
前回のサンプルをヒアドキュメントを使用して記述すると次のようになります。
- 【記述サンプル】
- #!/usr/bin/perl print << "END_OF_DOC"; Content-type:text/html\n\n <HTML> <HEAD> <TITLE>ヒアドキュメントのテスト</TITLE> </HEAD> <BODY TEXT="purple" BGCOLOR="#99ff99"> ヒアドキュメントで表\示 </BODY> </HTML> END_OF_DOC
このサンプルでの、注意点は5箇所です。
まず、3行目に 「print << "END_OF_DOC";」 の記述がありますが、これは、「この命令の次の行からEND_OF_DOC が見つかるまで print しなさい」という命令です。
次に、4行目、これは前回説明したとおり「これからの文字はHTML形式ですよ」という意味です。
この行が無いと正しく実行できないので必ず入力してください。
さらに、9行目、今回は文字色、背景色を指定してみましょう。
もちろん、このタグには"(ダブルクォーテーション)が含まれています。
そして、10行目、「表示」という文字の「表」のあとに¥(円マーク)があります。
これは、「表示」という文字の「表」以降の文字が文字化けを起こすのを防ぐために必要です。
詳しくは別の機会で説明しますが、CGIの中に埋め込んだとき、何種類かの文字は、文字形式によっては文字化けを起こしてしまうという症状が出ます。
その回避作で、一度、¥を削除して実行してみるとわかります。
最後に、13行目の「END_OF_DOC」これは、3行目のprint命令のために必ず必要です。
それ以外は、前回サンプルのHTML文書の部分を記述しただけです。
■ CGIの実行
さあ、これを前回と同様にエディタなどで作成し、「heardoc.cgi」と名前を付けて、「cgi-bin」フォルダに保存します。
実行方法は、前回と同様です。
アドレスは「//127.0.0.1/cgi-bin/heardoc.cgi」と入力します。
どうですか?正常に表示されましたか?
今回のサンプルでわかったと思いますが、前回のサンプルのように各行を全部直していかなくてもいいのです。
上からの4行と最後の行のみ追加してやれば、ホームページの文章を加工することなくそのまま使えます。
(文字化けの部分のみちょっと加工してやればいいのです。)
どうです?簡単でしょう。
それと、もうひとつの方法は、作成されたホームページのファイルを読み込んでそのまま表示するという方法です。
■ ファイル表示のサンプル
それでは、ファイル表示のCGIを作成するにあたってホームページのようなHTMLで作成したファイルが必要になります。
そこで、上記のサンプルを少し加工して、次のように作成します。
- 【記述サンプル】
- <HTML> <HEAD> <title>ファイル表示のテスト</title> </HEAD> <BODY TEXT="purple" BGCOLOR="#99ff99"> ファイル表示で表示 </BODY> </HTML>
この内容は、HTML文書そのままです。
この文章をエディタなどで作成し、「testhtm.dat」と名前を付けて、「cgi-bin」フォルダに保存しておきます。
次に、そのファイルを表示するCGIを次のように作成します。
- 【記述サンプル】
- #!/usr/bin/perl print "Content-type:text/html\n\n"; open(FILE, "<testhtm.dat"); while(<FILE>){ print; } close(FILE);
まず、3行目までは、前回のサンプルと同じです。
4行目は、「testhtm.dat というファイルを読みますよ」という命令です。
5行目は、「そのファイルの終わりがくるまで繰り返しなさい」という命令です。
6行目は、「読んだデータをそのまま表示しなさい」という命令です。
7行目は、5行目のwhile命令の「繰り返す範囲の終了」を表します。
8行目は、「読み込みファイルを閉じなさい」という命令です。
それでは、今までと同様に、この文章をエディタなどで作成し、「filedsp.cgi」と名前を付けて、「cgi-bin」フォルダに保存します。
■ CGIの実行
さて、それでは実行してみましょう。
実行方法は、今までと同じです。
アドレスには「//127.0.0.1/cgi-bin/filedsp.cgi」と入力します。
どうですか?うまく表示されましたか?
2つ目に記述した方法では、入力ファイル(読み込むファイル)の名前を変更するだけで、HTML文章を全く変更することなく、どのHTML文章にも使えます。
どうです?便利でしょう?
ま〜だ、Perlの入り口に入ったところなので便利さは実感できないかもしれませんが、応用次第で、いろんなことができるようになります。
注意)「ファイル表示のサンプル」を参考にして通常のHTML文書を出力(表示)させるとき、もし、そのHTML文書とCGIのフォルダが違うときは、注意が必要です。
そのHTML文書の中に画像やリンクがあったとき、その記述はCGIから見た相対アドレスか、絶対アドレスに変更してください。
そのHTML文書自体はCGIから出力されるのでファイルの位置関係が変わることになるからです。