Perl 2d阵列推送

时间:2017-03-05 20:04:13

标签: arrays perl

为什么在创建以下数组@ 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的相同结果?

1 个答案:

答案 0 :(得分:2)

而不是:

my @test1 = [
     ['note', 1],
     ['note', 3]
];

你可能想要:

my @test1 = (
     ['note', 1],
     ['note', 3]
);

方括号将创建一个匿名数组,并将返回对新数组的引用。因此@test1将包含单个标量值,该值是对数组的引用。

同样在转储类似数组的结构时,通常使用反斜杠作为前缀来传递引用通常更清楚:

print Dumper(\@test2);

给出了:

$VAR1 = [
      [
        'note',
        1
      ],
      [
        'note',
        3
      ]
    ];

请记住,在Perl函数调用中传递数组时,数组会“展平”到参数列表中。