Perlでカレンダー
30分プログラム、その255。上(id:mzp:20080228:wday)で書いたことがやっぱり納得できないので、Perlで実装してみる。
たしかにそれっぽい値にはなるんだけど、1違う気がする。あと、元コードではうるう年の判定コードが間違っていることも発見。divとmodを間違えている予感。
使い方
$ perl cal.pl 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
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # cal.pl - # # Copyright(C) 2008 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2008/02/29 22:19:26 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use POSIX qw(strftime); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$summer) = localtime(); $year += 1900; my $length = (31,$year % 4 == 0 ? 29 : 28,31,30,31,30,31,31,30,31,30,31)[$mon]; my $skip = (7-($mday % 7)+$wday) % 7 + 1; # +1 ??? print ' ' x $skip; my $col = $skip; for(my $i = 1; $i <= $length; $i++){ printf "%2d ",$i; if(++$col == 7){ print "\n"; $col = 0; } } print "\n";