極悪です。
@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/