作者: 閑舎
日時: 2002/5/27(13:11)
INOUE Kenji <deq@...> さん writes.

>   その例は,実際には,内容がなくなっているのではなく @_ に () が代入
> されている状態です.

試してみました。確かにそうなっていますね。エラーメッセージの Global
... を安易に信じたのがまずかった(^^;。ただ、

myfunc('hello');

sub myfunc {
  print "1> @_\n";
  utility1();
  print "2> @_\n";
  utility2();
  print "3> @_\n";
#  utility2(@_);
#  print "3> @_\n";
}

sub utility1 {
  @_ = 'bye';
  print "u1> @_\n";
}

sub utility2 {
  local @_ = 'bye';
  print "u2> @_\n";
}

を実行してみると、

1> hello
u1> bye
2> hello
u2> bye
3> 

となるので、単純に関数呼び出しをしたら local @_; が実行されるわけではな
いようです。あくまで関数内で明示的に local @_ を使うとき、その関数から抜
けると、正常に @_ が復元されない、ということのようです。

--
本田博通(閑舎)
Hiromichi Honda <raku@...>