日付関係。

簡単なカレンダーみたいなもの作ろうとして、Perlで日付*1を扱う方法、知らんなぁ*2、と思って調べてみた。

Date::Simpleというのが使えるらしい。ってことでダウンロード*3
解凍してREADMEをながめたら*4

If you lack "make", copy the "lib/Date" directory to your module
directory (run "perl -V:sitelib" to find it).

とか書いてあったから、フォルダごと移動して終わり。

#! /usr/bin/perl
use strict;
use warnings;
use Date::Simple;
my $year = 2005;
my $mon = 8;

my $date = Date::Simple->new( $year, $mon, 1 );
my $last_date = Date::Simple->new( $year, $mon + 1, 1 );
print " "x5, "$year年 $mon月\n";
print "月 火 水 木 金 土 日\n";
if( $date->day_of_week ){
	print " " x ( 3 * ( $date->day_of_week - 1 ) );
}else{
	print " " x ( 3 * 6 );
}
while( $date != $last_date ){
	printf( "%2d ", $date->day );
	print "\n" if( $date->day_of_week == 0 );
	$date++;
}
print "\n";

'cal -m 8 2005'に同じ*5
日曜日からはじめた方が楽なのに、わざわざ月曜からにしてますよ*6
もしくは、

perl -mDate::Simple -e '$d=Date::Simple->new(2005,8,1);print "   "x$d->day_of_week; for(;$d->month==8;$d++){print !$d->day_of_week?"\n":"", $d->format("%d ");}'

な感じ。

<追記> アップロードしたら、Scalar::Util*7がないだとかでエラー。そのままコピー、だとこういう確認ができないのか。こちらもlibの中のをそのままコピーで良さそう。 </追記>

*1:というか、「月」ですね。その月の最後の日、とか。

*2:localtimeとか使って+60*60*24するとかしか思い浮かばん。

*3:http://search.cpan.org/~yves/Date-Simple-3.02/lib/Date/Simple.pm

*4:英語だから、「読んだ」ってほどは読んでない。

*5:日本語表示ですが。

*6:「神様」が7日目に休んだってんだから、日曜は週の最後だ、とか思ってたけど、ユダヤ教だと土曜が休みらしいですね。別にどっちでもいいけど。

*7:http://search.cpan.org/~gbarr/Scalar-List-Utils-1.17/lib/Scalar/Util.pm