是否有可能push
到Perl中的数组引用?谷歌搜索建议我首先尊重数组,但这并不实际。它推入推理数组,而不是引用数组。推送到数组参考
例如,
my @a =();
my $a_ref = [@a];
push(@$a_ref,"hello");
print $a[0];
@a
将不会被更新,该代码将失败,因为阵列仍然是空
(我还在学习Perl的引用,所以这可能是一个令人难以置信的简单问题。很抱歉,如果如此)
是否有可能push
到Perl中的数组引用?谷歌搜索建议我首先尊重数组,但这并不实际。它推入推理数组,而不是引用数组。推送到数组参考
例如,
my @a =();
my $a_ref = [@a];
push(@$a_ref,"hello");
print $a[0];
@a
将不会被更新,该代码将失败,因为阵列仍然是空
(我还在学习Perl的引用,所以这可能是一个令人难以置信的简单问题。很抱歉,如果如此)
这可能有助于根据内存地址而不是变量名称进行思考。
my @a =(); # Set aside memory address 123 for a list.
my $a_ref = [@a]; # Square brackets set aside memory address 456.
# @a COPIES the stuff from address 123 to 456.
push(@$a_ref,"hello"); # Push a string into address 456.
print $a[0]; # Print address 123.
该字符串进入不同的内存位置。
而是将$a_ref
变量指向列表@a
的内存位置。 push
影响存储器位置123.由于@a
也指存储器位置123,其值也改变。
my $a_ref = \@a; # Point $a_ref to address 123.
push(@$a_ref,"hello"); # Push a string into address 123.
print $a[0]; # Print address 123.
$a
不$a_ref
,($a
是给予一个sort{}
第一比较变量,$a[0]
是@a
数组的第0个元素).Never使用$a
,或$b
外的自定义排序子程序,而且应该尽量避免@a
和@b
阵列太(有很多更好的选择)...
你在做什么是分配到$a_ref
,一个匿名数组,然后推到它"hello"
,但打印出@a
阵列的第一个元素。
是可能的。这对我有用。
my @a =();
my $aref = \@a; # creates a reference to the array a
push(@$aref, "somevalue"); # dereference $aref and push somevalue in it
print $a[0]; # print the just pushed value, again @$aref[0] should also work
如已经提及的,将$aref = [@a]
复制和不能创建参照
可以直接推到一个数组引用而不deferencing。
my $arrayRef = [];
push $arrayRef, "one";
push $arrayRef, "two";
print @$arrayRef;
输出
onetwo
文档:http://perldoc.perl.org/functions/push.html
用Perl 5.14开始,推可以采取一个标量EXPR,其必须保持 到unblessed数组的引用。
5.14版必须先取消引用数组ref。
push @$arrayRef, "item";
编辑:Annnnd直接推送到阵列ref已被弃用在最近的perl版本(5.24?)。鉴于此,在推动增加代码的兼容性之前总是解除引用@ {$ arrayRef}会更安全。
引用上的'push'实际上完全在Perl 5.24中被删除。 – Xaerxess 2017-09-08 07:57:33
'my $ a_ref = \ @a;' - 您创建了一个新的array_references,第一个元素为空数组 - >所以只是一个空数组。 – Konerak 2010-06-16 15:39:41
'$ a_ref = [@a];'没有引用原始的'@ a' - 它复制其内容。 – Ether 2010-06-16 16:21:30