CGIスクリプト内で使用されるC言語と良く似た構造を持つファイル処理コマンドで、コンパイルの必要ない言語です。 要するに、EBSの中核を担っているプログラム言語であるということです。 perlは“パール”と読みます。
スクリプトをぱっと見ていただければわかりますが、全体のほとんどが英語で構成されています。ほとんどのプログラミング言語は英語に似た形式を持っています。例えば、
print "Hello!!";
これは「Hello!! と画面に出力(print)せよ」、という命令文です。
if ($n >= 0) {print "Hello!!";}
今度は if を用いて、「もし(if)、変数nが0以上なら Hello!! と出力(print)せよ。」という、条件を持たせた命令文です。 このように、英語といっても if や for や print など、比較的馴染みのある英単語のがほとんどですから、あまり戸惑う必要はないでしょう。 また英単語と同じくらい頻繁に出てくるのが = < * などの演算子と呼ばれる記号です。演算というのですから計算するわけで、これらを組み合わせることによって様々な条件や数値を設定していきます。 つまりプログラムとは英単語を用いた命令と、それを取り巻く計算式によって成り立っているというわけです。
プログラムには英単語と数式しか使わないのですから、当然の事ながら全角文字(日本語)の入る余地はありません。基本的にプログラムソース内に全角文字を入れるのは禁止です。ためしに入れてみると、ほぼ間違い無くエラーが発生します。
でも実際の画面を見ると全角文字が表示されてますよね……?実は全角文字を使用できる場所には、ある一定の法則があります。詳しいことは後ほど説明しますが、基本的に全角スペースも含めて全角文字はNGということを覚えておいてください。 意外と間違えやすいのがカッコ()やクォーテーション“”などの記号。見た目があまり変わらないので注意が必要です。もし間違って全角スペースを入れてしまうと大変です。なにせ見えないですから。私は一度これにものすごく悩まされた記憶があります。 全角が駄目なら半角カナはどうかというと、これもNG。全角よりさらに駄目です。絶対に使っちゃいけません。ブラウザにもよりますが、激しく文字化けします。 これはPerlにかぎらずweb全般に言えることです。
Perlのプログラムにおいては、一つの命令が終わるたびに必ず セミコロン“;”をつける必要があります。 慣れてくるとこれがないと落ち着かなくなるものですが、はじめの頃はついつい忘れがちになります。
具体例をあげてみますと
print "Hello!"; #### 出力
$a=$b; #### 代入
my @a=split(/\s/,$b); #### 変数宣言
kansu(); #### 関数呼び出し
見えにくいですが、いずれの場合も必ず末尾にセミコロンをつけています。 基本的には全ての命令の末尾にセミコロンをつける、と覚えておいてください。
変数というのは、要するに一時的にあるデータを保存しておく場所のことです。 他の言語と違っていちいちint型とかchar型とか宣言する必要は無く、いつでも好きなときに宣言無しで使えます。新しい変数にデータを代入した=その変数を宣言したことに等しくなります。 ただ一つ約束事があって、必ず変数名の前にはドルマーク“$”をつける必要があります。 変数は基本的にどんな名前でもつけることが出来、同じ名前の変数は、同じものとして判断されます。
たとえば、
$test = 1; ### 変数$testに1を代入。
$test = $test + 1; ### $testに1を加える
print "$test"; ### $testの内容をを表示
これを実際に動かしてみると、“2”が出力されることがわかります。2行目の式は一見おかしいように見えますが、この = は等式ではなく代入を表すものです。
変数には数値だけでなく文字列を入れることもでき、
$hello = "こんにちは"; ### 変数$helloに文字列“こんにちは”を代入
このように半角のダブルクォーテーションでくくってやることで、文字列を代入できます。 変数は、同じsub内であったら有効ですが、あくまで一時的なものでそれが永久に保存されるわけではありません。得たデータをちゃんとした保管場所に保存するには、さらに別の操作が必要です。
スクリプトの途中に#マークを挿入すると、その後ろから行末まで“コメント”として認識されます。 “コメント”とはつまり、プログラムとして認識されない、プログラム側からは無視される場所の事です。
次の例を見てみましょう。
$data=5; # 変数$dataに5を代入します。このエリアはコメントです。
本来なら不正な所に全角文字があるので、エラーになってしまいますが、#マークの後はコメントとして認識されるので、そこから行末までは無視されているのがわかります。 無視されるわけですから、コメントをたくさん増やしてもCGI上ではまったく負荷が変わりません。コメントは主に、そこがどのような動作をするのか簡単な説明を記述します。 ただし#はPerl部分にのみ有効です。Html部分では <!-- この中がコメント --> を用います。