作者: 閑舎
日時: 2002/5/27(00:12)
dune <FZH01112@...> さん writes.

> jcode.pl v2.6 と v2.13 では再現しませんでした。

v.1.12 では再現しますね。ちなみに v.1.12 では、

sub convert {
    local(*_, $ocode, $icode) = @_;
...

と @_ で受けています。これで壊れるのでしょう。v.2.13 では

sub convert {
    local(*s, $ocode, $icode, $opt) = @_;

と $s で受けています(ま、見た通りですけど(^^;)。

> sub utility{
> 	local @_ = 'bye';
> }

local を my に代えると、

  Can't use global @_ in "my" at hoge3.pl line 14, near "my @_ "
  Execution of hoge3.pl aborted due to compilation errors.

のようなエラーメッセージが出るところから、@_ はグローバル変数の中でも特
殊な扱いになっていることがわかりますね。@ARGV などだとエラーになりません
し。何か歴史的理由があって、local の場合は @_ が扱えるようになってはいる
が(何か古い用法があって、その互換性のために残してある?)、危ない、とい
う感じですね。

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