Perl:YAML:Hash 如何选择条目?

3

您好,Perl专家们

根据下面的YAML文件和这个示例Perl:YAML iterate in the Array?,请有心人给我展示一个perl示例,我可以在其中选择国家并打印出我去过的城市。

USA:
    BeenThere: [Miami, Denver, Las Vegas, Chicago]
    ToVisit:   [Los Angeles, Boston]
Europe:
    BeenThere: [Paris, Amsterdam, Dublin, Bulgaria, Madrid]
    ToVisit:   [Budapest, Belgrad]
Latam:
     BeenThere: [Venezuela, Bogota]
     ToVisit:   [Argentina, San Paulo]

非常感谢!

我推荐Mark关于引用的简短教程 - Grant McLean
2个回答

2

您是想获得每个国家的信息,还是只需要特定一个国家的信息?

特定一个国家:

my $country_name = '...';
my $country = $data->{$country_name};
my $visited = $country->{BeenThere};
for my $city_name (@$visited) {
   say $city_name;
}

大家好:

for my $country_name (keys %$data) {
   my $country = $data->{$country_name};
   my $visited = $country->{BeenThere};
   for my $city_name (@$visited) {
      say "$city_name, $country_name";
   }
}

不确定为什么不起作用,但非常感谢。 DB <3> s main ::(yam3.pl:7):我的$country = $data->{$country_name}; DB <3> l 7 == >我的$country = $data->{$country_name}; 8:我的$visited = $country->{BeenThere}; 9:对于我的$visited中的每个$city_name@ { 10: say $city_name; 11 } 12
13
DB <3> p $country_name 美国 DB <4> s main ::(yam3.pl:8):我的$visited = $country->{BeenThere}; DB <4> l 8 == >我的$visited = $country->{BeenThere}; 9:对于我的$visited中的每个$city_name@ { 10: say $city_name; 11 } 12
13
DB <4> p $country DB <5> q vihtorr@w00w /var/www $
- vcapp
除了缺少分号之外,它运行得很好。已添加。头文件:use strict; use warnings; use feature qw( say ); use YAML::XS qw(LoadFile); my $data = LoadFile('test.yaml'); - ikegami

2

根据您对“Select”的定义方式,这可能会有所帮助:

use strict;
use warnings;
use YAML::XS qw(LoadFile);

my $data = LoadFile('test.yaml');

for my $city (@{$data->{USA}{BeenThere}}) {
  print("$city ");
}

每个国家都是一个哈希引用,城市则是数组引用(处理方式类似于您传递的链接)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接