[英]Hash and array with Perl
我有一个.plist文件,Data :: Dumper可以看到这个表单
$VAR1 = {
'SPOOLS' => [
'SPOOL1',
'SPOOL2',
'SPOOL3'
],
'path' => '/usr/local/thanks/for/your/help',
'contentMatch' => [
{
'priority' => '1',
'match' => '*.hello'
},
{
'match' => '*.guys',
'priority' => '2'
}
]
};
要在Perl中访问我的.plist文件,我使用以下代码:
my $locPlist = "conf.plist";
my $configdict = NSDictionary->dictionaryWithContentsOfFile_($locPlist);
my $plistref = Foundation::perlRefFromObjectRef($configdict);
my %plist = %{$plistref};
我知道如何使用“$ plist {path}”和带有“$ plist {SPOOLS} [0]”的SPOOLS数组访问“path”但是:我如何将SPOOLS转换为数组,类似于my @array = $plist{SPOOLS}
我怎样才能获得“contentMatch”的内容?
谢谢你的帮助!
编辑:非常感谢你的帮助,我能够访问数据。 但是有一种更简洁的方法可以直接从hashM和内容中取回contentMatch中的内容而不是这样做:
my $number_matches = scalar @{ $plistref->{contentMatch} } ;
my $a = 0;
my %events;
foreach ( @{ $plistref->{contentMatch} } ) {
$events{match}[$a] = $_->{match};
$events{priority}[$a] = $_->{priority};
$a = $a+1;
}
最好,蒂姆。
my @spools = @{ $plistref->{SPOOLS} };
my @content_match = @{ $plistref->{contentMatch} };
或者,深入挖掘contentMatch
示例:
foreach ( @{ $plistref->{contentMatch} } ) {
say "match: $_->{match}";
say "priority: $_->{priority}";
}
有关在Perl数据结构手册中处理Perl中的复杂数据结构的更多信息。
更新:您要求以其他方式访问contentMatch数据的帮助。 我不确定你在问什么 - 所有你的示例代码似乎都是将哈希数组转换成数组的哈希值。 而且我认为散列数组可以更好地表示数据。
但这是你的代码和你的数据。 所以我认为这就是我写下你想要做的事情。
my %events;
foreach ( @{ $plistref->{contentMatch} } ) {
push @{ $events{match} }, $_->{match};
push @{ $events{priority}, $_->{priority};
}
我会更高兴地把它保存为一系列哈希,我已经给你了那些代码。
my @content_match = @{ $plistref->{contentMatch} };
我认为理解Perl中复杂数据结构的工作方式对于成为一名称职的Perl程序员至关重要。 我强烈建议您熟悉perldsc中的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.