作者: INOUE Kenji
日時: 2002/5/27(03:21)
井上 (DEQ) です.

At 11:15:51 pm 2002/5/26, dune wrote:
> の内容がなくなります。何が起こっているのかわかりません。    

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

  なにが起こってるかは,local の動作から見れば,それほど不思議では
ない気がします.ただこういうふうには使っちゃいけないような.(^^;

  local "変数" は以前の "変数" の値を一時的に別の場所に退避させておいて,
その変数をそのスコープ内で新しい用途に使用できるようにし,local をした
スコープから抜けるときに以前の値を戻します.

例えば極悪さんのプログラムをちょっと変えた次のものを実行してみてください:

myfunc('hello');

sub myfunc{
	print "1> @_\n";
	utility('test');
	print "2> @_\n";
}

sub utility{
	local @_ = ('bye');
}

あるいは utility(); のままで utility 関数の最初に @_ = 'test'; でも
いいかもしれません.
後は,そもそも関数呼び出しが local @_; をしてるのと同じはずです.

これで分かります?
といっても僕の推測が絶対に当たってるとは言えないけれど.(^^;

---   INOUE Kenji / DEQ <deq@...>
http://www.necoware.com/~deq/