Perlでの多次元配列の実体コピー
リファレンスのみをコピーする事をshallow copyと云い、実体までコピーする事をdeep copyと云います。
以下は、そのサンプルです。なにかの参考になれば、幸いです。
2次元deep copy
my $org_data_two_dimension = [["A01", "A02", "A03", "A04"], ["B01", "B02", "B03", "B04"]]; my $cpy_data_two_dimension = [map [@{$_}] , @$org_data_two_dimension]; print $cpy_data_two_dimension->[0][0], "\n"; print $cpy_data_two_dimension->[1][0], "\n"; $cpy_data_two_dimension->[0][0] = "AAAAAAAAAAAA"; $cpy_data_two_dimension->[1][0] = "BBBBBBBBBBBB"; print $org_data_two_dimension->[0][0], "\n"; print $org_data_two_dimension->[1][0], "\n"; print $cpy_data_two_dimension->[0][0], "\n"; print $cpy_data_two_dimension->[1][0], "\n";
3次元deep copy
my $org_data_three_dimension = [[["A01", "A02", "A03", "A04"],["C01", "C02", "C03", "C04"]], [["B01", "B02", "B03", "B04"]]]; my $cpy_data_three_dimension = [map [map [@{$_}], @{$_}] , @{$org_data_three_dimension}]; print $cpy_data_three_dimension->[0][0][0], "\n"; print $cpy_data_three_dimension->[1][0][0], "\n"; $cpy_data_three_dimension->[0][0][0] = "AAAAAAAAAAAA"; $cpy_data_three_dimension->[1][0][0] = "BBBBBBBBBBBB"; print $org_data_three_dimension->[0][0][0], "\n"; print $org_data_three_dimension->[1][0][0], "\n"; print $cpy_data_three_dimension->[0][0][0], "\n"; print $cpy_data_three_dimension->[1][0][0], "\n"; print $cpy_data_three_dimension->[0][1][0], "\n"; print $cpy_data_three_dimension->[0][1][1], "\n";