wata.dev

perlのforeachは配列の要素を編集することになるから気をつける

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

ブログの記事一覧