__PACKAGE__ 頻出のコードがうざいとき

いちいち__PACKAGE__と書かなければならないのは面倒くさい!

DBIx::Classのシンタクスシュガーがほしい - Islands in the byte stream

はてブコメントの斜め上っぷりに激しくわらわせていただきました。

たしかにこんだけいっぱいでてくるとうっとおしいですよね。

こういう話題は好きなので冗談半分でわたしも考えてみました。

メソッドチェーンもどき案

Package::Fake::Method という名前で

package Package::Fake::Method;

sub Chain {
    my ($target) = @_;
    return bless { target => $target }, __PACKAGE__;
}

sub DESTROY {}

sub AUTOLOAD {
    my $self = shift;

    my $method = our $AUTOLOAD;
    $method =~ s{ \A .* :: }{}xmso;

    $self->{target}->$method(@_);

    return $self;
}

1;

下記のようなコードにする。

package DB::Main::Artist;
use base qw/DBIx::Class/;
use Package::Fake::Method;

Package::Fake::Method::Chain(__PACKAGE__)
    ->load_components(qw/ PK::Auto Core /)
    ->table('artist')
    ->add_columns(qw/ artistid name /)
    ->set_primary_key('artistid')
    ->has_many(cds => 'DB::Main::CD');

1;

DSL ぽさはないものの,わりと素直!(DSL ぽく書く案は断念しました。)


CPAN にありそうだと思ったけど,調べずに書いた。うんうん。