広告
広告
"my" はリストアップされた変数を、囲っているブロックやサブルーチン、eval や do の中でローカルなものにします。複数の値を並べる場合には、括弧で括る必要があります。並べる要素は左辺値として使用できるものでなければなりません。英数字の識別子のみを文面上の字句スコープに入れることができます。$/ のようなマジカルな組み込み変数をローカル化するには、local を使う必要があります。
my $_; # 不正
"local" の宣言とは違い、"my" で宣言した変数は呼び出したサブルーチンを含む外界からは完全に見えないものとなります。たとえそれが同一のサブルーチンであっても呼出ごとに新しいものとなります。しかし、eval() を使えば、その eval() 自身の中で宣言によって名前が見えないようになっているのでない限り評価が行なわれる字句スコープの変数を見ることができます。EXPR に代入を行なうことも可能で、変数の初期化に使うことができます。初期化子を与えなかった変数の値は未定義値となります。これはよくサブルーチンの引数に名前を付けるのに使われます。EXPR に代入を行なうときmy は EXPR がスカラとして参照されるか、配列として参照されるかには影響しません。つまり、
my($foo) = <IN>; my @FOO = <IN>;
はどちらも右辺にリストコンテキストをもたらしますが、
my $foo = <IN>;
では、スカラコンテキストになります。
my($min, $max, $thunk) = @_; my $result = ''; my $i;
広告