無料ブログはココログ

amazon

フォト

« LED電球の値段について考える | トップページ | ニュージーランドでの地震を考える »

2011年2月19日 (土)

Perlのforeachは反則では?

Perlで下記のように作成して実行する。

@array = ("A","B","C");
foreach $value (@array) {
  print "$value\n";
}

確かに結果は、

A
B
C

となる。$valueには@arrayの一個づつがセットされるように見える。

次に下記のように作成して実行する。

@array = ("A","B","C");
foreach $value (@array) {
  $value = $value . "X";
  print "$value\n";
}

確かに結果は、

AX
BX
CX

となる。これも、$valueには値がセットされるように思える。

ところが最後にprint @arrayを入れて、

@array = ("A","B","C");
foreach $value (@array) {
  $value = $value . "X";
  print "$value\n";
}
print @array;

とすると、

AX
BX
CX
AXBXCX

と表示される。もとの配列@arrayの内容までが変更されている。

つまり、「foreach $value (@array)」 は、配列@arrayの要素一個づつの値を$valueに入れる、のではなく、$valueには@arrayの要素一個づつのポインターがセットされる。

これは反則ではないだろうか?

「foreach $value (@array)」と、明示的に変数$valueを指定したからには、$valueには配列要素の一個づつの値がセットされてもよさそうなものである。他のプログラム言語ではそのようになっていると思う。試しにExcel VBAではそうのようになった。

Perlだけの問題なのか、Perlとはそのようなもんだ、なのかは不明だが、気をつけなければならないのは確かだ。

ん~ん。なんだかな~。

« LED電球の値段について考える | トップページ | ニュージーランドでの地震を考える »

パソコン・インターネット」カテゴリの記事