69. local @_ = という書き方


番号順一覧Top スレッド順一覧Top
作者: dune
日時: 2002/5/26(23:15)
極悪です。

@nifty の会議室で不思議な質問が出てました。自分の作った関数
の中から jcode::convert を呼ぶと @_ の中身が壊れるそうです。

壊れるスクリプトを見せて欲しいと思いますが、質問主さんは引数
が 20 個もある関数を作るほどのプロで、スクリプトの内容をあま
り細かくは書けないそうで・・・僕もどういうスクリプトを書いたら
どういうふうになったのかよくわかりません。断片的には

>  $jpn_title = "あいうえお";
>  &jcode::convert(*$jpn_title, 'jis');

とか書いてるようです。再現した、って書いてる人に少し聞き出し
てみましたが、例えば下のスクリプトを実行すると



%perl hoge3.pl
1> hello
2>

%



となって、確かに utility を呼ぶと myfunc から見えている @_ 
の内容がなくなります。何が起こっているのかわかりません。    
local @_ という書き方自体、僕は初めて見るのですが、これはど
ういう場合に使うのでしょうか? また、ある種の jcode.pl のバ
ージョンではこれと同じこと(utility の代わりに jcode::conver
t を呼び出しても、同様に呼び出した側の @_ の内容が壊れる)が
起こりうるのでしょうか? jcode.pl v2.6 と v2.13 では再現しま
せんでした。



--^ hoge3.pl
myfunc('hello');

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

sub utility{
	local @_ = 'bye';
}
--$



# 実は関数の引数が 20 個ってのを読んだ時点で、「あぁ、それは
# バグだね」って思ったのですが、教えてもらった上の hoge3.pl 
# の動きは理解できないので侮れないなぁ、と思い直した次第。
-- 
FZH01112@..., http://www1.u-netsurf.ne.jp/~dune/
前の発言: 68. Let's野ぷ野ぷ(その6)〜方程式の根 [dune] 2002/5/25(17:15)
後の発言: 70. Re: local @_ =という書き方 [閑舎] 2002/5/27(00:12)
親発言:
子発言: 70. Re: local @_ =という書き方 [閑舎] 2002/5/27(00:12)
        71. Re: local @_ = という書き方 [INOUE Kenji] 2002/5/27(03:21)