K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>もう一つ間違いとは言い切れないのですが、気になったところがあるのでついでに書いておきます。 > >P85の補足「各言語のグローバル変数の扱い」のPerlの部分に「localとかmyとかを付けて宣言するとローカル変数となる。」とあります。 >しかし、Cやjavaをおもに使っている人にとってlocalがローカル変数というのはかなり違和感があると思います。 > >例えば、localを使った次のようなプログラムだとおかしな結果になります。 >=============================================================== >#!/usr/bin/perl > >$hoge = "global"; > >&func_local; >&func_my; > >sub print_hoge { > print "hoge is $hoge\n"; >} > >sub func_local { > local $hoge = "local"; > print "func_local: "; > print_hoge; >} > >sub func_my { > my $hoge = "my"; > print "func_my: "; > print_hoge; >} >=============================================================== >上記のプログラムを実行すると出力結果は >func_local: hoge is local >func_my: hoge is global >になります。 >myをつけた変数はCのローカル変数と同じように使えますが、localをつけた変数はCのローカル変数とは違います。 > >ちなみに、「初めてのPerl 第3版」の4.7 local演算子には「しかしlocalという名前は間違っています---あるいは、少なくとも、誤解を招く名前です。(中略)そうです、local変数と呼ばれる変数の正体は、実はグローバル変数なのです!」と書かれています。 > >myがない頃はlocalが使われていたそうですが、なぜmyより先にlocalが作られたのでしょう? >実装が楽だったとかなのでしょうか。 >Cより新しい言語なのにCと同じローカル変数が使えなかったというのはどうなんだ・・・。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!