読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

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)だと、右側が先に評価されるのな。
ちょっと気取って書いたらこれだよ!