ヒアドキュメントの記法は 複数行にわたる文章を出力するのに便利である. 下のプログラム部分を 実行してみよ.
print <<Section1; This is the first line. This is the second line. Section1
この例の Section1 の部分の文字列を終端文字列という. 終端文字列は変数名と同様,ユーザが決める. print <<Section1 の次の行から引用が始まり, 引用開始に使った終端文字列だけからなる行があると, そこで引用は終了する.
デフォルトでは二重引用符と同じ引用となり,変数展開が行なわれる. 終端文字列を一重引用符で囲むことで一重引用符と同じ引用ができる. 二重引用符を明示的に指示することもできる. 次のプログラム部分を実行し,違いを確かめよ.
$a = "llama"; print <<"Section1"; The valiable is $a. Section1 print <<'Section2'; The valiable is $a. Section2
HTML 文書の生成など, 複数行に渡る文字列を出力する場合,個別の print 文を 書き連ねてもよいが,ヒアドキュメントを利用することもできる. つかいやすい方を利用せよ.
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">\n'; print '<html lang="ja">\n'; print '<head>\n';
print <<'Section1'; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> Section1
変数展開を行いたい場合は 2 重引用符による引用を 行う必要があるが,$ などの文字をエスケープしなければならない ことに注意せよ.
my $repno = 1; print "<title>shortreport $repno \"here-document\"</title>";
CGI プログラムは,HTML 文書(とヘッダ)を生成するプログラムと思えば理解 しやすい.ユーザは通常の静的な HTML 文書と同様に CGI プログラムにリク エストを行う.CGI プログラムが動作し,ヘッダと HTML 文書を生成し, ユーザに返す.ユーザからは静的な HTML と同様に利用できる.
CGI プログラムとして標準出力へヘッダと HTML 本体を出力するプログラムを 書けばよい.
antares のホームディレクトリの下に public_html ディレクトリがある. ここに他人から読み出し可能のパーミッションで置かれたファイルは ウェブ上に公開さる.この public_html 直下に cig-bin というディレクトリ を作成せよ.public_html, cgi-bin のパーミッションはどちらも 755 に なっているか確認せよ.
下記のプログラムを antares 上で ~/public_html/cgi-bin/first.cgi として作成せよ.
#!/usr/bin/perl -w print <<'Section1'; Content-type: text/html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>my first CGI</title> </head> <body> <h1>Hello world!</h1> <p>This is my first CGI page.</p> </body> </html> Section1
cgi-bin ディレクトリで ls -l first.cgi コマンドを実行し,アクセス権が -rwxr-xr-x となっていることを確認し,コマンドラインから実行せよ. 異なっている場合は chmod 755 first.cgi コマンドを実行し,正しく設定せ よ.
ブラウザから
http://www.yamamotolab.jt.u-tokai.ac.jp/%7Eusername/cgi-bin/first.cgi
としてアクセスしてみよ.
次に This is my first CGI page. の代りに date コマンドの結果を表示する CGI プログラムを作成する.
ここでは <p>This is my first CGI page.</p> を出力する部分, その前を出力する部分,後ろを出力する部分に分割する方針で作成する. This is my first CGI page. を出力するプログラムを以下のように書き変え よ.
#!/usr/bin/perl -w print <<'Section1'; Content-type: text/html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>my first CGI</title> </head> <body> <h1>Hello world!</h1> Section1 print "<p>"; print "This is my first CGI page."; print "</p>\n"; print <<'Section2'; </body> </html> Section2
一般の perl プログラムでできる処理を 行うことができる. print "This is my first CGI page."; の部分を print `date`; に変更することで目的のプログラムを作成できる.
課題「HTML 文書の生成」 を読んで第 6 回課題を提出しなさい.