カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

Perlで'&{}'をoverloadする

こんな感じのことをできるとしばらく前にConfig::Mergeのコード読んで知った。

package MyClass;

use overload
    '&{}'       => sub { my $self = shift; return sub { $self->foo( @_ ) } },
    fallback    => 1;

sub new { bless {}, shift }
sub bar { 'bar' }

package main;

my $obj = MyClass->new;

print $obj->bar; # 'bar'
print $obj->();  # 'bar'