2001/10/29

今回の課題

今回から Perl を勉強します。大学のパソコンには日本語の使えるPerlが インストールしてあります。自宅でも使いたい場合は Vector の Perl のページ からJperl(Perl5)をダウンロードしてください。

Jperl はコマンドプロンプトから実行します。 コマンドプロンプトを開いて次のコマンドを実行してください。

I:\>jperl -v
    ^^^^^^^^ ここを入力

バージョン情報などが表示されれば、Jperl が使える状態になっています。 これから作成するファイルも各自のwebページに載せていただきますので、 まず、wwwフォルダに移動しておきます。そしてメモ帳(notepad)で 新しく cal.pl というファイルを作ります:

I:\>cd www
I:\www>notepad cal.pl

cal.plの中味は次のようにします:

die "usage: cal month year\n" unless @ARGV == 2;
($mon, $year) = @ARGV;

$lastday = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$mon - 1]
         + ($mon == 2 && ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0));

print "      $year/$mon\n S  M Tu  W Th  F  S\n";

foreach(("  ") x &getweek($year, $mon), 1 .. $lastday){
    printf ('%2.2s ' , $_);
    print "\n" unless ++$days % 7;
}

print "\n"; exit;

sub getweek{
    local($year, $month) = @_;
    if($month == 1 || $month == 2) {$year--;$month += 12;}
    int($year + int($year/4) - int($year/100) + int($year/400) + int((13*$month+8)/5) + 1) % 7;
}

コピーして貼り付けたりしないでまじめに入力してみましょう。 ここでは全角の文字は一切使いません。空白に見えるところは半角のスペースを 使って下さい。入力できたら、上書き保存して下さい。このときメモ帳は開いた ままにしておきます。 そして次のように作成したプログラムを実行します:

I:\www>jperl cal.pl 10 2001
      2001/10
 S  M Tu  W Th  F  S
    1  2  3  4  5  6 
 7  8  9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 29 30 31 

2001年10月のカレンダーが表示されたら成功です。うまくいかない場合は メモ帳でさらに修正を加えてから再度試してみましょう。 cal.pl の解説は次回行います。 早く学びたい人はPerlのページを読んで下さい。 Perlに関する参考書は特に指定しません。大きな書店やパソコンショップに いけばたくさん売っていると思います。読みやすそうなものを一冊購入して おくと便利です。

●ある月のカレンダーを作る

さて今作ったcal.plを使って、なにか自分にとって特別の意味のある 月のカレンダー(パスワードに関係のある誕生月は避けて下さい)を 表示して下さい。それを自分のホームページに取り込む方法を説明します。 例えば、今月の場合を考えます。カレンダーを画面に出すのではなく calendar.txt というファイルに書き込むことにします:

I:\www>jperl cal.pl 10 2001 > calendar.txt

「>」は本来画面に出力されるものを別の方向に「リダイレクト」することを 表しています。右向きの矢印だと思って下さい。これでカレンダーの データをもったファイル calendar.txt ができます。 これをメモ帳で開いて、コピーや貼り付けを使って 自分のHTMLファイルの中に取り込んで下さい。 取り込んだ部分は <pre></pre>とで囲むとよいでしょう。

今回の課題はこれだけです。来週は高麗祭で休みになります。 課題のチェックは来週の金曜日に行いますのでそれまでにカレンダーを 載せておいてください。もちろん作成したファイルは 192.168.13.15 (fourier) に転送しておかなければなりません。

カレンダー関係のプログラミングが済んだら、 「パスカルの三角形」、 「シラバス表示プログラム」、 「パズル」などのテーマの中からいくつか 選んで勉強する予定です。