読者です 読者をやめる 読者になる 読者になる

autoboxがかっこいい件

Perl

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的なインターフェースじゃなくて関数インターフェースで呼んでる。なんかよい書き方ないのかなー。