日付関係。
簡単なカレンダーみたいなもの作ろうとして、Perlで日付*1を扱う方法、知らんなぁ*2、と思って調べてみた。
- http://bulknews.net/lib/mailmag/31/mag.txt
- http://perldoc.jp/docs/modules/Date-Simple-2.03/Simple.pod
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