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@...>