ActiveSupport equivalent to Perlで知ったautoboxがかっこいい。上のmiyagawaさんのコードを引用させてもらうと、DateTimeオブジェクトの生成が
use autobox; use autobox::DateTime::Duration; print 1->day->ago, "\n"; # 2008-01-14T23:25:53 print 2->minutes->from_now, "\n"; # 2008-01-15T23:28:20
というようにActiveSupportっぽく書けたりする。autoboxを使ったモジュールは結構簡単にかけるので、以下のように使える、autobox::URI::Fetchを書いてみた。
my $res = 'http://d.hatena.ne.jp'->fetch; # URI::Fetch::Responseオブジェクト my $content = 'http://d.hatena.ne.jp'->content; # http://d.hatena.ne.jp の内容の文字列
せっかくなので、CodeReposに上げてみた。
若干気持ち悪いことになっているのが、autoload/URI/Fetch.pm以下の関数。
sub SCALAR::fetch { my $uri = URI->new(shift); return URI::Fetch::fetch('URI::Fetch', $uri); }
ふつうに考えるとURI::Fetch->fetch($uri)としたいところなんだけど、そう書いてしまうととSCALAR::fetchが呼び出されてしまって無限に再帰してしまう。しかたないのでOO的なインターフェースじゃなくて関数インターフェースで呼んでる。なんかよい書き方ないのかなー。