shift,shiftの罠
おやと思ったのでメモ。
sub point { my $x = shift; my $y = shift; ... } point(20, 30); #=> $x = 20, $y = 30
これはいい。
sub point { my ($x, $y) = (shift, shift); ... } point(20, 30); #=> $x = 20, $y = 30
これもまだわかる。
sub run { shift->(shift); } my $cb = sub { my $w = shift; print "$w\n"; }; run($cb, "Hello!");
Undefined subroutine &main::Hello! called at - line 2.
\(^o^)/
shift->(shift)だと、右側が先に評価されるのな。
ちょっと気取って書いたらこれだよ!