#!/usr/bin/perl # 年齢計算表示プログラム(Perl版) ver 0.3 (2008/11/04) # Copyright 2006 - 2008 Sena Minamino All rights reserved. # WebPage http://my.sena.to/ # Weblog http://blog.sena.to/ # E-Mail my@sena.to # 自分の生年月日を登録 $b_year = 1981; # 年(西暦4桁) $b_mon = 12; # 月 $b_day = 6; # 日 # サーバタイム調節(海外サーバで日本時間とのズレが生じる場合) $diff = 0; # 単位:時間(マイナス指定も可) ### 設定終わり ### # 現在の日時取得 local($sec, $min, $hour, $mday, $mon, $year) = (localtime(time + $diff * 3600)); $year += 1900; $mon++; # 引数によって実行結果を分ける $mode = $ENV{'QUERY_STRING'}; if ($mode eq "") { &display; } elsif ($mode eq "check") { ✓ } elsif ($mode =~ /\d{8}/) { &direct; } else { &error; } # 表示部のヘッダー sub header { print "Content-type: text/html\n\n"; print <<"EOM"; 年齢計算表示プログラム EOM } # 表示部のフッター & 著作権表示 sub footer { print "

年齢表示計算プログラム ver 0.3
\n"; print "Copyright 2006 - 2008 Sena Minamino All rights reserved.

\n"; print "\n\n"; } # チェックモード sub check { &header; &math($b_year, $b_mon, $b_day); print "

現在の日時は $year年$mon月$mday日 $hour時$min分$sec秒 です。

\n"; print "

あなたの生年月日は $b_year 年 $b_mon 月 $b_day 日 で、"; print "現在 $age 歳です。

\n\n"; &footer; } # 8桁の数字の引数を生年月日に分解 sub direct { $ENV{'QUERY_STRING'} =~ /^(\d{4})(\d{2})(\d{2})/; $b_year = $1, $b_mon = $2, $b_day = $3; &display($b_year, $b_mon, $b_day); } # 年齢計算 sub math { ($b_year2, $b_mon2, $b_day2) = @_; # 現在の年から誕生日の年を引く $age = $year - $b_year2; # 現在の日時が誕生日の日時を越えてなければ年から更に1歳引く if (($mon < $b_mon2) || ($mon == $b_mon2 && $mday < $b_day2)) { $age--; } return ($age); } # 引数無しの年齢表示 sub display { &math($b_year, $b_mon, $b_day); print "Content-type: text/html\n\n"; print "$age"; } # エラー処理 sub error { &header; print "

Error!

\n"; print "

引数が正しくありません。

\n"; &footer; }