第11章 ファイルハンドルとファイルテスト 練習問題 その2

平日より数倍いそがしかったGWも終わったのでがんがんいくよー。

3. コマンドラインからファイルのリストを受け取り、最も古いファイルとその古さを表示する

まず、以下のように書いてみましたよ。

#!/usr/bin/env perl -w
use strict;

my $oldest = 0;
my $f_old = '';

foreach (@ARGV) {
    my $mod = -M;
    $f_old = $_;
    $oldest = $mod if $mod > $oldest;
}

if ($f_old) {
    print "$f_old was modifyed $oldest days ago.\n";
} else {
    print "No file name passed\n";
}

「最も古い」の基準に最後にいつ修正されたかを使用しています(-M で取り出せる)。実行結果は、こんな感じ。

$ ./ex11-3.pl *
words2.txt was modifyed 19.9789236111111 days ago.

そうとう見にくいですね。解答によればこれをきれいに整形できると、追加点がもらえるそうな。

たとえば上の値、19.9789236111111の単位は日。1日は60 * 60 * 24 = 86400秒なので、これをかければ単位を秒に換算できる。これにlocaltime関数を適用してごにょごにょすれば良さそう。と思ったけど、localtime関数は1900年からどれだけ経ったかを返してくれるわけで、返り値もXX日XX時間XX分という形式で出力するには適していない。さて、どうすればよいかな。なんかしらモジュールを使うんかな。

初めてのPerl

初めてのPerl

  • 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/05
  • メディア: 単行本
  • 購入: 15人 クリック: 474回
  • この商品を含むブログ (294件) を見る