0

大家好,我有关于 perl 的简单新手问题。我正在查看某人的 perl 代码,他有一些变量声明如下:

my $OutputFiles=[];
$OutputFiles = 
[
 { FID => 789133, TAGE => "BRWSGF_05K", nfiles => 1, Suffix => 'jpg' },
 { FID => 789134, TAGE => "BRWSGF_W05K", nfiles => 1, Suffix => 'jpg' }, 
 { FID => 789135, TAGE => "BRWSGF_E05K", nfiles => 1, Suffix => 'jpg' },
];

它似乎是某种哈希数组,但变量声明$OutputFiles不像数组,所以我很困惑。请让我知道变量$OutputFiles应该是什么以及如何操纵这样的变量。我再次坦率地承认我是 Perl 新手。

4

3 回答 3

5

[]创建一个数组引用,它是一个标量。

my $foo = [1, 2, 3];

给出与以下相同的值$foo

my @bar = (1, 2, 3);
my $foo = \@bar;

有关详细信息,请参阅perldoc perlref

于 2013-07-12T14:22:25.280 回答
0

正如 Quentin 已经提到的,它是包含哈希的数组引用,我正在添加一些小东西,您可以如何取消引用它并从中访问特定的键,因为它包含哈希。

use strict;
use warnings;
use Data::Dumper;

my $OutputFiles=[];
$OutputFiles =
[
 { FID => 789133, TAGE => "BRWSGF_05K", nfiles => 1, Suffix => 'jpg' },
 { FID => 789134, TAGE => "BRWSGF_W05K", nfiles => 1, Suffix => 'jpg' },
 { FID => 789135, TAGE => "BRWSGF_E05K", nfiles => 1, Suffix => 'jpg' },
];

my @output = @{$OutputFiles}; #dereference the array ref
print Dumper(@output );

print Dumper(@{$OutputFiles}[0]->{FID}); # accessing the specific key
于 2013-07-12T14:40:41.757 回答
0

$OutputFiles 是一个数组引用,就像昆汀的回答所解释的那样。你说它是一个哈希数组也是对的,但你也可以把它想象成一个哈希引用数组。以下是访问数据的方法:

#!/bin/perl

use strict;
use warnings;


my $OutputFiles=[];
$OutputFiles = [
                { FID => 789133, TAGE => "BRWSGF_05K", nfiles => 1, Suffix => 'jpg' },
                { FID => 789134, TAGE => "BRWSGF_W05K", nfiles => 1, Suffix => 'jpg' },
                { FID => 789135, TAGE => "BRWSGF_E05K", nfiles => 1, Suffix => 'jpg' },
               ];
my ($FID, $TAGE, $nfiles, $Suffix);

for my $hash_ref ( @$OutputFiles ) {
    $FID = $hash_ref->{FID};
    $TAGE = $hash_ref->{TAGE};
    $nfiles = $hash_ref->{nfiles};
    $Suffix = $hash_ref->{Suffix};
    print "FID: $FID TAGE: $TAGE nfiles: $nfiles: Suffix: $Suffix\n";
}
于 2013-07-12T14:37:42.430 回答