kakts-log

programming について調べたことを整理していきます

perl foreachを使う際の注意点

 perlで配列の要素全体に対して処理をするときにforeachを使うのはよくあることだと思います。
文字列のリストすべてに対して繰り返し処理を行うときは

foreach $word (qw/ hoge fuga hello /) {
     print  " This is $word";
}


とこんなふうに書けば、各要素を繰り返すたびに$wordに要素が入って使えます

このとき注意しなきゃいけないのが、$wordは各要素のリストをコピーしたものでなくて、リストの各要素そのものになっています。
つまり、ループ内で制御変数$wordに対して変更を加えると、本来のリストの要素そのものが変更されてしまいます。
これに気づかずに実装するとえらいめに会うかもしれません


@list = qw/ test1 test2 test3 /;
foreach $word (@list) {
 $word = "aaaa$word \t";   #$wordの前にaaaaをつける 末尾にタブを追加
}
 print @list; # aaaatest1 aaaatest2 aaaatest3と表示される