Perl LocalとMyの違いは?

[上に] [前に] [次に]
J.Naka [E-Mail] 1999/07/04(日) 18:27:45
こんにちは。
PerlのLocalとMyの区別が分からないのですが。
ラクダ本&某リファレンス本見ても、分かったような気が
しても直ぐに「あれ?どういうこっちゃ?」になってしまいます(笑)

今の理解は、
LocalとMyは基本的にはスコープ内の局所変数という意味では
同じで、Localはそれが静的に存在し、Myはスコープの出入り
に生成&消滅を伴う。
なんですが、こんなんであってますか?

言語初心者に解かりやすく御説明願えないでしょうか(_ _)

ふじ 1999/07/05(月) 00:57:15
local と my ですね。(小文字)

簡単に言うと、localの変数は、そのサブルーチンから呼ばれた
他のサブルーチンから見えます。
myの変数は、他のサブルーチンから見えません。

#!/usr/bin/perl

&sub_a;

sub sub_a{
local($a) = 1;
my($b) = 2;
&sub_b($a,$b);
}
sub sub_b{
print "a : $a\nb : $b";
}

こんな例で分かるかしら。

ふじ 1999/07/05(月) 00:59:27
あ、訂正。
>&sub_b($a,$b);

&sub_b;

引数いらないです(^^;

いいづか [HomePage] 1999/07/05(月) 23:49:28
"my"は宣言したサブルーチン「のみ」からアクセスできる変数で、
文法的な意味が強いです。

"local"は宣言したサブルーチンと、そのサブルーチンが呼んだ
サブルーチンからアクセスできる変数で、命令的な意味が強い
です。

サブルーチンでちょっと使いたいワークエリアを定義するときは
myの方がいいですが、Perl5でしか使えないと思いました。
Perl4以前では使えないはず(僕の使用しているWeb Spaceでは
使えるところと使えないところとがあった)。

J.Naka [E-Mail] [HomePage] 1999/07/06(火) 12:28:23
[[解決]]
ふじさん、いいづかさん、解答ありがとさんです。
(再び)今の理解は
local my 共に宣言されたスコープ内側に存在する局所変数である。
両者ともに宣言スコープの外側に出ると消滅する。

違いは
my:
  宣言スコープ内側に完全にプライベート。
  これをレキシカルスコープという。
  他の言語の local に相当。
local:
  myの特性に加え、
  宣言スコープ内から呼ばれる他の別空間スコープ(関数内)
  からもアクセス可。
  これは、勝手に命名すれば、宣言スコープをCurrentとすれば、
  スコープ的階層下とコード的階層化チェインの場においては有効、つまり、
  グローバルな、「階層下グローバル変数」というもの。


う〜ん、奇麗に表現しきれないですが、ほぼ把握したような感じ(^^;
サブルーチン先で呼び元の変数を参照アクセスする時のコードの意味が
今、見えてきたようです。(^_^)v

まっあれですわ、マニュアルはシチュエーション毎に色々な用語で
それぞれのシチュエーションに特化した説明している(当たり前?(笑))
ので、最初は理解しようとアッチコッチ見るので、それが混乱に拍車を
掛けているようです。。。ひー低脳児ぃぃだぁ(;;)

#さっ次ぎは、クラス構築方法をマニュアルのややこしい説明に
 惑わされずにシンプルな方法を見付るぞー。
 
---------------------
ふじさん>
 ご丁寧にコードまで載せて頂き有り難う御座います(_ _)

いいづかさん>
>サブルーチンでちょっと使いたいワークエリアを定義するときは
>myの方がいいですが、Perl5でしか使えないと思いました。
なるほど、myは他言語の local に相当とすれば、それが妥当ですね。
Perl5の拡張部分はいよいよ昏迷を深めてきたか。。ってPerl4以前知らないのですが(^^;

fuelの管理者 [E-Mail] [HomePage] 1999/07/06(火) 13:28:30
>  グローバルな、「階層下グローバル変数」というもの。
単に「名前を一時的に置き換える」とすればいいのでは?

>Perl5の拡張部分はいよいよ昏迷を深めてきたか

これインタープリターの実装に関する古典的な手法。
動的スコープと言います。

こんな本に書いてるのネ。(Jargon)
:Wizard Book: /n./  "Structure and Interpretation of
   Computer Programs" (Hal Abelson, Jerry Sussman and Julie Sussman;
   MIT Press, 1984, 1996; ISBN 0-262-01153-0), an excellent computer
science
   text used in introductory courses at MIT.  So called because of
   the wizard on the jacket.  One of the {bible}s of the
   LISP/Scheme world.  Also, less commonly, known as the {Purple
   Book}.

J.Naka [E-Mail] 1999/07/07(水) 08:44:50
>これインタープリターの実装に関する古典的な手法。
>動的スコープと言います。
「動的スコープ」という語は「ラクダ本」には煩雑に出てます。
最近までその意味はチンプンカンプンだったですが最近少し分
かってきたようです。
んで、それが「古典的手法」なのですかー、
うーんコンピューターサイエンスは奥が深いですねー
新しい(自分にとって)言語に接するたびに驚き桃の木です。

>こんな本に書いてるのネ。(Jargon)
英語の本のようですね。英語読解は無理なわたくしです(笑)

fuelの管理者 [E-Mail] [HomePage] 1999/07/07(水) 09:42:10
>英語の本のようですね。英語読解は無理なわたくしです(笑)
不景気の時代で廃刊や出版社の倒産が多く、
翻訳版の書名を迂闊に出せないだけです。
すいません。

[上に] [前に] [次に]