« FormValidator::SimpleでDBに値が存在しないか確認するプラグイン | メイン | Class::DBIとTime::Piece »

きよへろさんのPerlコードをリファクタリングしてみる

ハテナオヤさんのところでやってる「きよへろのPerlコードをリファクタしようのコーナー No.2」を自分でも書いてみる。

課題は、

「スクリプトを実行することで、現在の日付を返すスクリプト」


#!/usr/bin/perl
use strict;
use warnings;
my @lt = localtime;
printf("%04d/%02d/%02d %02d:%02d:%02d",$lt[5]+1900,$lt[4]+1,@lt[3,2,1,0]);

何が違うかと言うと、$year、$month、、と変数を使わないあたり。キーボードのストロークが少なくて済みます。
日付の処理はなんども使うので、5=year、4=month、、と覚えてしまう。

でも、「覚える」で終わっては、あまり良くないので

#!/usr/bin/perl
use strict;
use warnings;

my $LT_YEAR=5;
my $LT_MONTH=4;
my $LT_DAY=3;
my $LT_HOUR=2;
my $LT_MIN=1;
my $LT_SEC=0;

my @lt = localtime;
printf("%04d/%02d/%02d %02d:%02d:%02d",
    $lt[$LT_YEAR]+1900,$lt[$LT_MONTH]+1,
    @lt[$LT_DAY,$LT_HOUR,$LT_MIN,$LT_SEC]);

と書いてみたり。
あとは、constantやReadOnlyにしたり外部のモジュールにしたり。

やはりTime::Pieceは便利です。