簡體   English   中英

Perl 2d陣列推送

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM