__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 にありそうだと思ったけど,調べずに書いた。うんうん。