作者: WATANABE Hirofumi
日時: 2002/5/27(19:24)
わたなべです。

本名出てるよん。

安田敏博 <FZH01112@...> writes:

:@_ はどこからでも最初から定義済みの変数として見えるという意味でグ
:ローバルですが、@_ が指しているものや保持している値は関数に出入り
:する際に自動的に退避・復帰されます。つまり、local @_ 相当のことは
:暗黙で行われているわけす。それをさらに明示的に local @_ するのは
:変じゃないか、どういう意味があるのだろう、というのが第一の疑問で
:す。

local @_には何も意味はないでしょう。
元々jcode.plでは
  local(*_, $ocode, $icode) = @_;
だったと閑舎さんも書いてますし。
これだと$_がaliasとして使えるので意味があります。
*_が*sに変更されたのはthreadを有効にしたperlだと$_がlexical
変数になりtype globが使えなくなるため。

:ところが utility 内で local @_ と書いてしまうと、myfunc が保持し
:ている @_ の内容まで変わってしまいます(tschus になってしまう)。
:これは不思議です。まさに
:
:>>その例は,実際には,内容がなくなっているのではなく @_ に ()  が
:>>代入されている状態です.
:
:なわけですが、なんか直感的じゃないです。

たぶんバグだと思います。
local @_という使いかたは誰もしてないか、
そもそも呼ぶほうの関数で、普通は
  my ($a, $b, $c) = @_;
のように受けてしまうので、@_が壊れていても気づかなかったんで
はないかと。

-- 
わたなべひろふみ