開発環境
- Mac OS X Snow Leopard (OS)
- TextWrangler(Text Editor) (いずれはBBEditを入手したい!)
- Script言語:Perl
『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也、田中 慎司、吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の7章(サブルーチンへのリフェレンス), 7.8(練習問題)、1を解いてみる。
1.
コード(TextWrangler)
#!/usr/bin/perl use strict; use warnings; use File::Find; use Time::Local; # 問題のサブルーチン sub gather_mtime_between{ my($begin,$end) = @_; my @file_names; my $call_back = sub { my $timestamp = (stat $_)[9]; if( $timestamp >= $begin and $timestamp <=$end){ push @file_names, $File::Find::name; } }; ($call_back, sub{ @file_names }); } # テスト用のコード my $target_dow = 1; my @starting_directories = ("."); my $seconds_per_day = 24 * 60 * 60; my($sec, $min, $hour, $day, $mon, $yr, $dow) = localtime; my $start = timelocal(0, 0, 0, $day, $mon, $yr); while ($dow != $target_dow) { $start -= $seconds_per_day; if (--$dow < 0) { $dow += 7; } } my $stop = $start + $seconds_per_day; my($gather, $yield) = gather_mtime_between($start, $stop); find($gather, @starting_directories); my @files = $yield->(); for my $file (@files){ my $mtime = (stat $file)[9]; my $when = localtime $mtime; print "$when: $file\n"; }
入出力結果(Terminal)
サーマータイムについてはごまかしたまま。
今日は本書を読むのも、解答するのもいつも以上に時間がかかったけど、その分満足感、達成感も大!
0 コメント:
コメントを投稿