Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

配列の要素数だけを同じ文字で置き換える方法

タイトルそのまま。
たまたま perldoc perlop していたら、初めて見たようなことが書いてあったのでメモ。
例えば1〜10まで入っている配列の中身を全部「S」に入れなおす。

my @one_ten = 1 .. 10;

foreach

foreach my $int (@one_ten) {
  $int = 'S';
}


後方修飾だとこう。

$_ = 'S' for @one_ten;

map

@one_ten = map 'S', @one_ten;

x(repetition operator)

でさっき見つけたやり方。(perlopより)

@one_ten = ('S') x @one_ten;


ポイントなのが x の左辺を()で囲ってリストコンテキストにするところ。
スカラーコンテキストだと、連続した文字列が一個の要素として左辺に返る。

@one_ten = 'S' x @one_ten;
$" = q{ };
print "@one_ten\n";
#=> SSSSSSSSSS
#   ↑これが$one_ten[0]

あれ、心なしかmapの方が簡単に見える気がする…。
まあやり方はいろいろある。いえー。