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;
}