我有一个.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;
}
最佳, 添
答案 0 :(得分:0)
my @spools = @{ $plistref->{SPOOLS} };
my @content_match = @{ $plistref->{contentMatch} };
或者,更深入地了解contentMatch
示例:
foreach ( @{ $plistref->{contentMatch} } ) {
say "match: $_->{match}";
say "priority: $_->{priority}";
}
有关在Perl Data Structures Cookbook中使用Perl处理复杂数据结构的更多信息。
更新:您需要以其他方式访问contentMatch数据的帮助。我不确定你要问的是什么 - 所有示例代码似乎都是将哈希数组转换为数组哈希值。我认为哈希数组可以更好地表示数据。
但它是您的代码和数据。所以我认为这就是我写下你想要做的事情。
my %events;
foreach ( @{ $plistref->{contentMatch} } ) {
push @{ $events{match} }, $_->{match};
push @{ $events{priority}, $_->{priority};
}
我很高兴将它保持为一系列哈希值,并且我已经给了你那些代码。
my @content_match = @{ $plistref->{contentMatch} };
我认为理解Perl中复杂数据结构的工作方式对于成为一名称职的Perl程序员至关重要。我强烈建议您掌握perldsc中的示例。