argius note

プログラミング関連

使わないと忘れる

2年前まではまだ、習得率(?)がJavaと変わらない程度だったんですが、最近は圧倒的にJavaが多くなったのと、shellスクリプトを使うことが増えたため、使う機会が減っていました。
で、先日久しぶりにPerlで使い捨てスクリプトを書こうとしたら、「あれ、代入じゃないときの配列のdeep-copyってどうやるんだっけ?」などという事態に(おおげさ)。具体的には下記のサンプルコードの"@a2"のところ。

@a1 = qw( a b c );
@a2 = @a3 = @a1;
# 1,2 は mapの使い方としては正しくない
@z1 = map { $_ = 'Z' } @a1;
@z2 = map { $_ = 'Z' } @{[@a2]};
@z3 = map { 'Z' } @a3;
print "@a1 : @z1 \n"; # Z Z Z : Z Z Z
print "@a2 : @z2 \n"; # a b c : Z Z Z
print "@a3 : @z3 \n"; # a b c : Z Z Z