Perlの記述・文法
CGIはPerlの他に、ShellやC言語でも作成できます。
Perlはコンパイルする必要も無く、手軽で、現在一番多く利用されています。


Perlのヘッダー
Perlで作成するCGIスプリクトの先頭行には、必ずPerlが実行できるサーバーのパスを入力します。
#!/usr/local/bin/perl
#!/usr/local/bin/perl
サーバーによりパスは異なりますので、サーバー提供者に確認が必要です。
大体、上の2つのどちらかでいけるようです

HTMLヘッダー
CGI実行結果のほとんどは、HTMLドキュメント上に表示されます。
(グラフィックアクセスカウンターはGIF画像を表示します。)
Perl上でHTMLドキュメントを生成するには、HTMLヘッダーが必要になります。
print ”Content−type:text/html¥n¥n”;
このヘッダーより下に、HTMLタグでドキュメントを生成します。
HTMLタグの記述は、ホームページ作成時し同じです。

Perlからのデーター出力
Perlからのデーターをブラウザに出力(表示)するには、print関数を使います。
print ”CGIスプリクト(Perl)からブラウザへの出力です。¥n”;
print ”<タグ>¥n”
¥nは改行、¥n¥nでは空行のエスケープシーケンス
#!/usr/local/bin/perl  Perlが実行できるサーバーのパス
Perlヘッダーとデーター(ボディー部分)とを分けるため、空行を入れる 
print "require 'jcode.pl\n"; 日本語変換ライブラリーの宣言
print "Content-type: text/html\n\n";  Perl上でHTMLドキュメントを生成
print "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN>\n";  ドキュメントタイプの記述    実行には関係ない(無くても可)
print "<html>\n";  ファイル内容がHTMLと定義 </html>との間にHTMLドキュメントを記述
print "<head>\n"; ドキュメントに関する情報を</head>との間に記述
print "<meta http-equiv=Content-Type content= text/html; charset=x-sjis>\n"; ドキュメント情報の定義 ブラウザでの表示にシフトJISを使用と定義
print "<title>ブラウザに出力</title>\n";  HTMLドキュメントのタイトル
print "</head>\n";  ドキュメントに関する情報の終了

ここから下が表示されるHTMLドキュメント

print "<body bgcolor=#000000 text=#FFFFFF>\n";  背景を黒、文字を白に設定
print "CGIスプリクト(Perl)からブラウザへの出力\n";  文字データーを表示
print "<p>";  空行を表示
print "これが基本です。\n";  文字データーを表示
print '<A href="../kijyutu.html"><h1>戻る</h1></A>';  CGIスプリクトからここへ戻るためのリンク
print "</body>\n";  表示されるHTMLドキュメントの終了
print "</html>\n";  HTMLの終了

#!/usr/local/bin/perl

print "require 'jcode.pl\n";
print "Content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN>\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv= Content-Type content= text/html; charset=x-sjis>\n";
print "<title>ブラウザに出力</title>\n";
print "</head>\n";
print "<body bgcolor=#000000 text=#FFFFFF>\n";
print "CGIスプリクト(Perl)からブラウザへの出力\n";
print "<p>\n";
print "これが基本です。\n";
print '<A href="../cgi_3.html"><h1>戻る</h1></A>';
print "</body>\n";
print "</html>\n";





<html>
<head>
<meta http-equiv="Content-Type" content="" text/html; charset="x-sjis">
<title>ブラウザに出力</title>
</head>
<body bgcolor="#000000" text="#ffffff">
CGIスプリクト(Perl)からブラウザへの出力
<p>
これが基本です
<a href="../kijyutu.html"><h1>戻る</h1></a>
</body>
</html> 
このCGIスプリクトを実行すると このhtmlを実行すると

ダブルクォート(”)とシングルクォート(’)
Perlでは文字列はクォーテーション記号で囲むことになっています。(上記例のように)
ダブルクォート(”)で囲むと、変数や(¥n)といった特殊文字は、それぞれ変数の値や改行記号
などに置き換えられて出力されます

シングルクォート(’)で囲むと、その文字列通りに出力されます。



$site = "簡単CGI";
print "私のウェブサイトは$siteです\n";
print "<p>\n";
print '私のウェブサイトは$siteです';


$test1 = "ウルトラマン";
$test2 = "仮面の忍者 赤影";

と代入します。

ダブルクォートの場合
print "$test1\n";
print "$test2\n";

シングルクォートの場合
print '$test1';
print '$test2';

実際に違いを見てみましょう。押して!
どうですか、違いが分かりましたか。

 
ダブルクォートで囲った変数は展開されますが、シングルクォートで囲った変数は展開されません。
スカラー変数だけではなく、配列変数、ハッシュ変数でも同様です。


よくエラーが起こるのは、メールアドレスを変数に代入したときです。
下の2つの例をご覧ください。
#!/usr/bin/perl

$mail1 = "xxx@yyy.com";
print $mail1;


#!/usr/bin/perl

$mail2 = 'xxx@yyy.com';
print $mail2;


下の例ではエラーになりませんが、上の例ではエラーになってしまいます。
先ほど申したように、上の例ではダブルクォートが使われているため、
@yyyという配列変数を変数展開しようするが、ないためエラーとなります。
下の例ではシングルクォートなので展開されないためエラーにならず、メールアドレスが表示されます。

文字化けする文字.

CGIで使う Perl という言語の特性上,以下の文字は文字化けします.

― ソ Ы \ 噂 浬 欺 圭 構 蚕 十 
申 曾 箪 貼 能 表 暴 予 禄 兔 喀 
媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 
觸 軆 鐔 饅 鷭 x x \ \
例えば,「ソースを表示します」は「メ[スを侮ヲします」になってしまいます.
これを防ぐには,これらの文字の後には必ず \ をつけます.
つまり,「ソースを表示します」は「ソ\ー\スを表\示します」と記述することで,防げます.

ダブルクォートやシングルクォートの注意点.

CGIで使う Perl という言語の特性上,ダブルクォートやシングルクォートは注意しなければいけません.

ダブルクォートで囲まれたものの中で,ダブルクォートは使えません.
同様に,シングルクォートで囲まれたものの中で,シングルクォートは使えません.

どうしても使いたい場合は,\ を前につけます.

例えば,

print "<font color="red">";

は,ダブルクォートで囲まれたものの中にダブルクォートがあるので,サーバーエラーとなります.
単純に,"<font color=" で囲まれたとCGIは誤認できるからです.
そこで,

print "<font color=\"red\">";

と記述しなければいけません.


Perlの文法
・一行目以外の「#」で始まる行は、コメントで実行されません。
 行の途中で「#」を使用すると、それ以降がコメントになります。
・実行文の最後には、必ず「;」を置きます。
・変数は、いつでも、何処からでも使用することができます。変数名の宣言も必要ありません。
 変数には、「数値」・「文字」のどちらでも代入できます。
・処理の固まり(ブロック)は「{」と「}」で囲みます。
・Perl(UNIX)では大文字・小文字を区別します。