どのプログラミングも実例で学ぶのが一番と思いますので、まずは、カレンダ−プログラムからはじめましょう。次は 2002年4月のカレンダ−を表示するプログラムです。
#!/usr/bin/perl
#
# calendar.pl - Perl Calendar
#
$year = 2002;
$month = 4;
&find_first_last();
&show_a_month();
exit(0);
sub find_first_last(){
@month_days = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if(($year % 4) == 0 and ($year % 100) != 0 or ($year % 400) == 0) {
$month_days[2] = 29;
}
local ($days) = $year + int(($year-1)/4) - int(($year-1)/100) + int(($year-1)/400);
my $i = 0;
while($i < $month){
$days += $month_days[$i];
$i++;
}
$first_day = $days % 7;
$last_date = $month_days[$month];
}
sub show_a_month(){
print "$month/$year\n";
print " Su Mo Tu We Th Fr Sa\n";
my $i = 0;
while($i < $first_day){
print " ";
$i++;
}
$date = 1;
while($date <= $last_date){
print " ";
if ($date < 10){
print " ";
}
print $date;
if(($first_day + $date -1) % 7 == 6){
print "\n";
}
$date++;
}
print "\n";
}
次にこのプログラムを順に解説します。
#!/usr/bin/perl # # calendar.pl - Perl Calendar #の部分で、最初の #!/usr/bin/perl は「このスクリプトは Perl で実行せよ」という意味です。/usr/bin/perl は、私のシステムの場合で、皆さんの場合、perl は /usr/local/bin にあるかもしれません。どこに perl があるかは $ which perl コマンドで見ることができます。
次の行からの # マ−クはコメントをあらわします。この記号以降は実行されませんので、自由にコメントを書くことができます。ここでは一応、プログラム名とそのディスクリプションを書いておきました。
$year = 2002; $month = 4; &find_first_last(); &show_a_month(); exit(0);以上が、メインル−チンです。プログラムのうち、独立した部分は、できるだけサブル−チンにまかせ、メインル−チンはできるだけ単純に書くのが良いと思います。お気づきのように
&find_first_last(); &show_a_month();がサブル−チンに仕事を渡す命令で、& で始まり、sub で始まるサブル−チンと対応しています。仕事を渡す時、() の中にパラメ−タを入れるのですが、ここではパラメ−タを介さないでグロ−バル変数を使うようにしています。このことは、のちほど説明します。パラメ−タがない場合 () をつける必要はないのですが、これがサブル−チンであることが一目でわかるため、あえて () をつけました。最後に () がついていれば & がなくても動くようですが、& をつけておいた方が無難でしょう。
それから、変数やサブル−チンの名前にハイフンのつもりで - を使うと、perl はこれをマイナス記号とみなしてしまいますので、アンダ−スコア (_) を使うようにしましょう。次の例をごらんください。
(正) &find_first_last() (誤) &find-first-last()
変数は $ をつけてあらわします。$ を省くと Perl は、変数として認識しません。$year と year は同じではありません。
$year = 2002; $month = 4;の二つの式は代入式です。$year = 2002 は、「$year という変数に 2002 という数値を入れる」という意味で、「$year の価が 2002 である」という意味ではありません。それを表すには
$year == 2002; $year eq 2002;という書き方をします。
メインル−チンの最後の行
exit(0);はプログラムの終了を意味します。() 内の価 0 は「正常終了」を意味します。
各行の最後に ; がついていることをお見逃しなく。これがないと、perl はコマンド行の終わりがどこかわからず、エラ−を返します。エラ−の多くは、$ & ; が抜けている場合が多いので、注意しましょう。