どのプログラミングも実例で学ぶのが一番と思いますので、まずは、カレンダ−プログラムからはじめましょう。次は 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 はコマンド行の終わりがどこかわからず、エラ−を返します。エラ−の多くは、$ & ; が抜けている場合が多いので、注意しましょう。