Unknown::Programming このページをアンテナに追加 RSSフィード

2006-04-11 方法

19990701 -> 1999/07/01

Perlって良くも悪くもTMTOWTDI精神に則ってるので、

タイトルのような変換を行おうと思ったときに色々実装方法がありますよね。

まず思いつくのがsubstrかな


 my $date = '19990701';
 $date = substr($date,0,4) . '/' . substr($date,4,2) . '/' . substr($date,6,2);

あんまり美しくないよね。

じゃ正規表現


 $date =~ s|(....)(..)(..)|$1/$2/$3|;

うん、これがスタンダード?

正規表現嫌いだ!っていう人はこんなのも有りかな。


 $date = join '/' , unpack "A4A2A2" , $date;

いやぁ、同じことしたいだけなのに色々あるね。

そして一番エレガントなのはこれっすか?


 substr($date,4,2) =~ s|(..)|/$1/|;

substrが左辺値として有効なのを利用してます。

んー、実際の現場ではどれを選択するのか。

一番可読性高いのはどれなのか?

その辺考えながら楽しく実装するのがPerlの醍醐味(?)ですよね。

nipotannipotan 2006/04/11 22:12 use DateTime::Format::Strptime qw(strptime);
$date = strptime(’%Y%m%d’, $date)->ymd(’/’);

あえて全然一般的だとは思わない方法とか書いてみる…

tokuhiromtokuhirom 2006/04/12 02:18 うひ。DateTime::Format::Strptime::strptime って export できたんすね。。。

fbisfbis 2006/04/12 09:24 モジュール使うのは考えてなかったなぁ。
日付を扱ってるのが明示できるので意外と有りかもしれないですね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証