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
>英語の本のようですね。英語読解は無理なわたくしです(笑)
不景気の時代で廃刊や出版社の倒産が多く、
翻訳版の書名を迂闊に出せないだけです。
すいません。
[上に]
[前に]
[次に]