Perl 小品集 ─ webdiary

#!/usr/bin/perl
# webdiary.pl
#
# ウェブダイアリー自動作成

# 曜日変換テーブル 0=日... 6=土
@yobi = qw(日 月 火 水 木 金 土);

# 年月の入力
$input = @ARGV[0];
if($input eq ""){
    print "Input year and month in 4 digits.\n";
    print "Example: Input '0204' for April, 2002.\n";
    exit(0);
    }

# 年月は4桁で入力する(2002年4月は 0204 と入れる)
$c_month = $input % 100;
$c_year = ($input - $c_month) / 100;
$year = 2000 + $c_year;
$month = $c_month;

# 先月と次月を得る
$p_year = $c_year - ($c_month == 1);
$n_year = $c_year + ($c_month == 12);
$p_month = $c_month - ($c_month > 1) + 11 * ($c_month == 1);
$n_month = $c_month + ($c_month < 12) - 11 * ($c_month == 12);

# 年月が1桁の場合、先頭に 0 をつける
if ($c_year < 10){
    $c_year = "0$c_year";
    }
if ($p_year < 10){
    $p_year = "0$p_year";
    }
if ($n_year < 10){
    $n_year = "0$n_year";
    }

if ($c_month < 10){
    $c_month = "0$c_month";
    }
if ($p_month < 10){
    $p_month = "0$p_month";
    }
if ($n_month < 10){
    $n_month = "0$n_month";
    }

# 作成するファイル名を決め、それを書き込みファイルとして開く
$datafile = "diary$c_year$c_month.html";
open OUT, "> $datafile" or die $!;

# 作業バーを画面に表示する
print "Making <$datafile> ";

# HTML ファイルの先頭部分を記入する
&print_top();

# 日付を入れる
($first_day, $last_date) = &find_first_last($year, $month);
$date = 1;
while ($date <= $last_date) {
    $day = ($first_day + $date -1) % 7;
    print OUT "<p><b>$month月$date日($yobi[$day])</b></p>\n\n";
    $date++;
    print ".";
    }

# HTML ファイルの終わりの部分を記入する
&print_end();

print " done\n";
close(OUT);
exit(0);

sub find_first_last(){
local($year, $month, @month_days, $days, $i, $first_day, $last_day);
($year, $month) = @_;
@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;
    }
# 1月1日の曜日の計算
$days = $year + ($year-1)/4 - ($year-1)/100 + ($year-1)/400;
$i = 0;
while($i < $month){
    $days += $month_days[$i];
    $i++;
    }
# その月の1日の曜日と日数を返す
$first_day = $days % 7;  
$last_date = $month_days[$month];
return ($first_day, $last_date);
}

sub print_top()
{
my $print_text = << "_END_";
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>My Diary</title>
</head>
<body>

<h1 align="center">My Diary $year年$month月</h1>
<p align="center"><a href="diary$p_year$p_month.html">先月</a>  <a href="diary$n_year$n_month.html">次月</a></p>

_END_

print OUT $print_text;
}

sub print_end()
{
my $print_text = << "_END_";
<br><div align="center"><form><input type=\"button\" value="ホームページにもどる" onclick="location='../index.html'"></form></div>

</body>
</html>
_END_

print OUT $print_text;
}



[INDEX]