无法以这种方式更新变量

问题描述 投票:0回答:2

我正在编写一个Perl脚本,所以我在另一个数组@B中有一个数组@A,但是当更新数组@A时,数组@B不会考虑这个更新。

这是我的代码:

my @A;my @B;
@B=("test",[@A]);
@A=("aaa","bbb","ccc");
print $B[1][1];

它只有在我以这种方式更改行的顺序时才有效:

my @A;my @B;
@A=("aaa","bbb","ccc");
@B=("test",[@A]);
print $B[1][1];

问题是我需要保持行的顺序作为第一个例子吗?

有什么帮助吗?

perl
2个回答
7
投票

你没有在@B中存储@A,你正在存储一个匿名数组[],最初由@A的内容填充(即空)。但是,您可以存储对@A的引用:

@B = ( 'test', \@A );

6
投票

你被[ @A ]\@A之间的区别所灼烧。

  • [ @A ]的意思是“将@A的内容复制到一个新的匿名数组中并返回对该新数组的引用”。
  • \@A的意思是“返回对数组@A的引用”。

在您的第一个示例中,您在将任何内容放入其中之前复制@A的内容。所以你的新数组是空的。像这样重写你的第一个例子它会起作用。

my @A;
my @B;
@B = ("test", \@A);
@A = ("aaa", "bbb", "ccc");
print $B[1][1];
© www.soinside.com 2019 - 2024. All rights reserved.