2011年7月26日火曜日

開発環境

  • 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 コメント:

コメントを投稿