組み込みを使うかWrapperを使うか、それが問題だ
naoyaのはてなダイアリー - きよへろのPerlコードをリファクタしようのコーナー No.2やっぱり最初は localtime を素で使っちゃうよね。Perl の入門書にはおそらくほとんど localtime での例になってると思われます。しかし、僕なら Time::Piece を使う。
なぜって、localtime の関数型インタフェースがださすぎるから。Matt Sergeant タンのTime::Piece を使えば組み込みの localtime が OO インタフェースに変化します。
なのだけど、この手の組み込みはやたら実行回数が多い事も多く、そしてWrapperを使うとその分Performanceを失うことも多い。この手のWrapperの中で、Perl5に標準搭載されているものとしてはFile::statがあるが、これが以外と重かった。
search.cpan.org: BSD::stat - stat() with BSD 4.4 extentionsBenchmark: timing 100000 iterations of BSD::stat, Core::stat, File::stat... BSD::stat: 3 wallclock secs ( 2.16 usr + 0.95 sys = 3.11 CPU) @ 32160.80/s (n=100000) Core::stat: 1 wallclock secs ( 1.18 usr + 0.76 sys = 1.94 CPU) @ 51612.90/s (n=100000) File::stat: 7 wallclock secs ( 6.40 usr + 0.93 sys = 7.33 CPU) @ 13646.06/s (n=100000)
stat()はファイルシステムをなめるようなscriptだと、一回の動作で100万回呼び出すとかというのもザラなので、「かっこよく」書くためだけにOOP化Wrapperを使えるかというとビミョーなところである。
ちなみに上記で出たBSD::statは、私が昔書いた、BSD 4.4拡張版stat()にアクセスできるようにしたModuleで、FreeBSDのportsでもサポートされている。こちらがFile::statより速いのは、OOP版もXSで書いてあるから。
Wrapperを使うかどうかはこの辺も吟味した方がいいだろう。
ちなみに日付の扱いに関しては、以前本blogでも扱った事がある。今回はPOSIX::strftimeも紹介しておこう。こちらは標準添付である。これを使うと、例題は一行に収まってしまう。
perl -MPOSIX=strftime -le 'print strftime("%Y/%m/%d %H:%M:%S", localtime())'ないし
perl -MPOSIX=strftime -le 'print strftime("%Y/%m/%d %T", localtime())'
だ。
この辺の選択は、経験が生きてくる範囲でもある。いろいろ試してみて欲しい。PerlのTMTOWTDIを最も感じ取れるところでもある。
Dan the Man with Too Many Ways to Do It
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。