約4年に一度、2月29日が発生する閏年(うるうどし)かどうかを判定するには、次のロジックを素直に実装すれば良い。
- 4で割り切れる年は閏年
- ただし、100で割り切れる年は閏年ではない
- しかし、400で割り切れる年は閏年である
isLeap関数(サブルーチン)に西暦の年数を渡すと真偽値を返す。
サンプル
;# ;#閏年の判定 ;# print isLeap(1000), "\n"; print isLeap(2000), "\n"; print isLeap(2004), "\n"; #---------------------------------------------------- #■閏年の判定 #---------------------------------------------------- sub isLeap{ my $year = shift; return( #-- 400で割り切れる年は閏年 --# (($year % 400) == 0 ) or #-- 100で割り切れず、4で割れれば閏年 --# ((($year % 100) != 0) and (($year % 4) == 0)) ); }
結果は次のような感じになる。画面上には真偽値がそのまま表示されるため、大抵の環境では「ブランク」「1」「1」などとなるハズだ。
- 1000年 not 閏年
- 100で割り切れるため
- 2000年 閏年
- 100で割り切れるが、400で割れるため
- 2004年 閏年
- 100で割り切れず、4で割り切れるため
isLeapは次のように、そのままif文などに組み込めば良い。
if( isLeap($year) ){ print "$yearは閏年です"; }
余談になるが、「Leap」は本来、次のような意味がある。
leap
【名】 跳躍{ちょうやく}、飛躍{ひやく}、躍進{やくしん}、急激{きゅうげき}な変化{へんか}、急上昇{きゅうじょうしょう}、急増{きゅうぞう}
【自動-1】 ピョンと飛ぶ、飛び跳ねる、跳ぶ、飛び越える◆jump では跳躍の「動作」に、leap では跳躍による「移動」に重点が置かれる~英辞郎より引用
「leap year」で「うるう年」となる。