Arrays Perl解释以下变量声明
大家好,我有一个关于perl的简单新手问题。我正在看某人的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 => '
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
中的键访问每个散列值,实际上忽略上面的请求看到了下面我想要的内容