配列をコピーするには以下のように簡単に行えますが、
@foo = @bar;
配列の参照をコピーしたい場合は参照がコピーされるだけなので中身の値までコピーしてくれるわけではありません。
my @foo = ('A', 'B');
my @bar = \@foo; # 参照をコピーしても中身までコピーされるわけではない
@foo = (); # 参照元を初期化
foreach my $ref(@$bar) { # 参照元が初期化されているのでここでは何も出力されません
print "$ref\n";
}
配列の参照を中身も含めてコピー(deep copy)したい場合は、foreach等を使って愚直に要素を1個ずつコピーするか、またはCloneモジュールを使います。
use Clone qw(clone);
my @foo = ('A', 'B');
my $bar = clone(\@foo); # 参照を中身までコピーする
@foo = (); # 参照元を初期化
foreach my $ref(@$bar) { # 参照元を初期化してもOK
print "$ref\n";
}
結果は以下のようになります。
A
B
0 件のコメント:
コメントを投稿