为什么在创建以下数组@ test1和@ test2时存在差异?
#!/bin/perl -w
use Data::Dumper;
use warnings;
use strict;
my @test1 = [
['note', 1],
['note', 3]
];
print Dumper(@test1);
my @test2;
push(@test2, ['note', 1]);
push(@test2, ['note', 3]);
print Dumper(@test2);
test1的Datadump:
$VAR1 = [
[
'note',
1
],
[
'note',
3
]
];
for testt for test2:
$VAR1 = [
'note',
1
];
$VAR2 = [
'note',
3
];
是否有可能通过迭代推送到@ test2来创建@ test1的相同结果?
答案 0 :(得分:2)
而不是:
my @test1 = [
['note', 1],
['note', 3]
];
你可能想要:
my @test1 = (
['note', 1],
['note', 3]
);
方括号将创建一个匿名数组,并将返回对新数组的引用。因此@test1
将包含单个标量值,该值是对数组的引用。
同样在转储类似数组的结构时,通常使用反斜杠作为前缀来传递引用通常更清楚:
print Dumper(\@test2);
给出了:
$VAR1 = [
[
'note',
1
],
[
'note',
3
]
];
请记住,在Perl函数调用中传递数组时,数组会“展平”到参数列表中。