perlのforeachは配列の要素を編集することになるから気をつける
配列変数をforeachで処理するときに、配列変数の要素をワーク変数(下のサンプルでは$value)へ格納しますが、これには、値でなく参照が入ります。
ですので、ワーク変数を編集すると、実は配列変数の要素を編集することになり、思わぬ結果が生じることがあるのです(経験者は語る)。
だからだったのかー!!
#!/usr/bin/perl -w
use strict;
use warnings;
my @youbi = ('mon', 'tue', 'wed');
foreach (@youbi) { substr($_, 1, 2) = ""; } # @youbiの内容を編集してる!
foreach (@youbi) { print $_, "\n"; }
こうなる
m
t
w