3

違いは何ですか

myArr1 => \@existingarray

myArr2 => [
              @existingarray
          ]

@existingarrayをハッシュマップの要素に割り当てています。

私は正確に内部で何が起こるかを意味します。最初のものは同じ配列を指し、2番目の配列は要素を持つ新しい配列を作成します@existingarray

前もって感謝します

4

3 に答える 3

8

はい、最初のものは参照を取得し、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

于 2012-09-20T07:29:01.713 に答える
3

使用できます

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): シェルで機能する引用符を使用してください。

于 2012-09-20T07:29:41.560 に答える
2

角かっこは、割り当て時に @existingarray にあるもののコピーを使用して、新しい配列への参照を作成します。

于 2012-09-20T07:28:11.167 に答える