Arrays Perl解释以下变量声明

Arrays Perl解释以下变量声明,arrays,perl,variables,hash,Arrays,Perl,Variables,Hash,大家好,我有一个关于perl的简单新手问题。我正在看某人的perl代码,他有一些变量声明,如下所示: my $OutputFiles=[]; $OutputFiles = [ { FID => 789133, TAGE => "BRWSGF_05K", nfiles => 1, Suffix => 'jpg' }, { FID => 789134, TAGE => "BRWSGF_W05K", nfiles => 1, Suffix => '

大家好,我有一个关于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
应该是什么,以及如何操作这样的变量。
我再次坦率地承认我是一个rank Perl新手。

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

my $foo = [1, 2, 3];
给出与以下值相同的
$foo

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

有关更多详细信息,请参阅。

[]
创建一个标量数组引用

my $foo = [1, 2, 3];
给出与以下值相同的
$foo

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

有关更多详细信息,请参阅。

$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";
}

$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";
}

正如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

正如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

如果要使用Perl,学习如何识别、创建数组、散列和标量,以及如何将它们转换为引用或从引用中转换,这一点很重要。这是高效地传递大量数据的基础。我想说,他对Perl的了解并不比你多。没有理由将
$OutputFiles
设置为匿名数组两次。您可以删除第一行,然后在另一行的前面添加一个
my
。如果要使用Perl,学习如何识别、创建数组、哈希和标量,以及如何将它们转换为引用或从引用中转换,这一点很重要。这是高效地传递大量数据的基础。我想说,他对Perl的了解并不比你多。没有理由将
$OutputFiles
设置为匿名数组两次。您可以删除第一行,然后在另一行前面添加一个
my
。我明白了,它实际上是一个哈希数组,但表示为数组引用,对吧?从技术上讲,它是对哈希数组引用的引用。但你的理解基本上是正确的。谢谢你们两人的澄清。还有一个请求,任何人都可以给我一个简短的例子,说明我如何从变量
$OutputFiles
中通过其键访问每个散列值,实际上忽略上面的请求看到了我想要看到的内容,所以它实际上是一个散列数组,但表示为数组引用,对吗?从技术上讲,它是对一个散列数组的引用对散列的引用。但你的理解基本上是正确的。谢谢你们两人的澄清。还有一个请求,任何人都可以向我展示一个简短的示例,说明如何通过变量
$OutputFiles
中的键访问每个散列值,实际上忽略上面的请求看到了下面我想要的内容