[1401] Re:「プログラミング言語を作る」について
投稿者:名無しの読者
2009/07/21 21:32:14
もう一つ間違いとは言い切れないのですが、気になったところがあるのでついでに書いておきます。
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と同じローカル変数が使えなかったというのはどうなんだ・・・。