カレンダ−・プログラム(1)−メインル−チン

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

[前のぺ−ジ] [目次] [次のぺ−ジ]