かれこれ6年以上間違った知識で Perl とつきあっていたみたいなのだが。 Perl の foreach 文での「配列の各々の要素」っていうやつを変更すると、配列内の要素そのものが変更される、っていうことに今日初めて気付いた。 たとえばこんなふうに。 1: my @array = ("aa", "bb", "cc", "dd"); 2: 3: foreach my $each (@array) { 4: $each .= "+aa"; 5: } 6: foreach my $each (@array) { 7: print "$eachn"; 8: } なコードがある場合、その結果は: aa+aa bb+aa cc+aa dd+aa と 配列の要素はすべて 4行目にある "+aa" の追加がされる。 今日までは、3行目の foreach で @array の要素が一つずつコピーされて、foreach のスコープのなかで $each をどうしようと @array には影響しないなんて考えていたのだが、実際はそうでないってことだった。 配列の要素の値を変更したくない場合には、実際にはこのように別の変数に値をコピーしてやらないとダメなのですね。 1: my @array = ("aa", "bb", "cc", "dd"); 2: 3: foreach my $each (@array) { 4: my $tmp = $each; 5: $tmp .= "+aa"; 6: } 7: foreach my $each (@array) { 8: print "$eachn"; 9: } 今までの僕のやりかただと、@array の値を変更するときにはこんなことしていたんだよねぇ。 for (my $i = 0; $i < $#array; $i++) { $array[$i] .= "+aa"; } これからは foreach で配列の要素の値が変更できる...