$user->{name}
を呼ぶのが正しいけど$user->name
を呼んでしまったときに,もしかして:->{user} とか出る,みたいなのができる.
package Mosikasite { sub new { my ($class) = @_; bless {}, $class; } sub AUTOLOAD { my ($self) = @_; my $method = (split '::', $AUTOLOAD)[-1]; if (@_ == 1 && exists $self->{$method}) { die "もしかして:->{$method}"; } else { die; } } }; my $m = Mosikasite->new; $m->{hoge} = 1; $m->hoge;
https://gist.github.com/5e61b92f56c4d2c1bc4c
実行結果
% perl a.pl もしかして:->{hoge} at a.pl line 12.
そもそも->{name}を呼べっていうインターフェイスが変だけど,歴史的にそうなってて直すほどでもない場合などはこういうヒントあると便利な気がする.elseのところdie;っていうのは雑すぎるのでもうちょっとちゃんとしたほうがよさそう.