[英]Perl 2d Array Push
為什么以下數組@ 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的數據轉儲:
$VAR1 = [
[
'note',
1
],
[
'note',
3
]
];
test2轉儲:
$VAR1 = [
'note',
1
];
$VAR2 = [
'note',
3
];
是否可以通過迭代推送到@ test2來創建與@ test1相同的結果?
代替:
my @test1 = [
['note', 1],
['note', 3]
];
您可能想要:
my @test1 = (
['note', 1],
['note', 3]
);
方括號將創建一個匿名數組,並將返回對新數組的引用。 因此, @test1
將包含單個標量值,該標量值是對數組的引用。
同樣,在轉儲類似數組的結構時,通常更清楚的是在其前面加上反斜杠以傳遞引用:
print Dumper(\@test2);
這使:
$VAR1 = [
[
'note',
1
],
[
'note',
3
]
];
請記住,當您在Perl函數調用中傳遞數組時,該數組會“展平”到參數列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.