繁体   English   中英

使用Perl的哈希和数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM