違いは何ですか
myArr1 => \@existingarray
と
myArr2 => [
@existingarray
]
@existingarray
をハッシュマップの要素に割り当てています。
私は正確に内部で何が起こるかを意味します。最初のものは同じ配列を指し、2番目の配列は要素を持つ新しい配列を作成します@existingarray
前もって感謝します
はい、最初のものは参照を取得し、2 番目のものはコピーを実行してから参照を取得します。
[ ... ]
は無名配列コンストラクターであり、内部のリストを配列参照に変換します。
だから@a = 1, 2, 3
、
[ @a ]
と同じです
[ 1, 2, 3 ]
(配列はリストにフラット化されます) または
do {
my @b = @a;
\@b;
}
実際には、要素がコピーされます。
また、
my ($ref1, $ref2) = (\@a, [@a]);
print "$ref1 and $ref2 are " . ($ref1 eq $ref2 ? "equal" : "not equal") . "\n";
それらが同じではないことを確認します。もしそうなら
$ref1->[0] = 'a';
$ref2->[0] = 'b';
その後、等しくなり、$a[0]
等しくなくなります。a
b
使用できます
perl -e 'my @a=(1); my $ra=\@a; my $rca=[@a]; $ra->[0]=2; print @a, @{$ra}, @{$rca};'
221
[@existingarray] が @existingarray のコピーへの参照を作成するというあなたの仮定が正しいことを確認してください (そしてそれmyArray*
は Perl ではありません)。
WRT amon's revising my perl -e "..."
(fails under bash) to perl -e '...'
(fails under cmd.exe): シェルで機能する引用符を使用してください。
角かっこは、割り当て時に @existingarray にあるもののコピーを使用して、新しい配列への参照を作成します。