小智 47
考虑内存地址而不是变量名称可能有所帮助.
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.
Run Code Online (Sandbox Code Playgroud)
字符串进入了不同的内存位置.
而是将$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.
Run Code Online (Sandbox Code Playgroud)
您可以直接推送到数组引用而无需引用.
my $arrayRef = [];
push $arrayRef, "one";
push $arrayRef, "two";
print @$arrayRef;
Run Code Online (Sandbox Code Playgroud)
输出
onetwo
Run Code Online (Sandbox Code Playgroud)
文档:http://perldoc.perl.org/functions/push.html
从Perl 5.14开始,push可以采用标量EXPR,它必须包含对未经处理的数组的引用.
在5.14之前,您必须首先取消引用数组引用.
push @$arrayRef, "item";
Run Code Online (Sandbox Code Playgroud)
编辑:Annnnd直接推送到数组ref已在最近的perl版本中弃用(5.24?).鉴于此,在推动增加代码兼容性之前始终取消引用@ {$ arrayRef}会更安全.
| 归档时间: |
|
| 查看次数: |
40196 次 |
| 最近记录: |