Perl:YAML在数组中迭代?

时间:2012-07-18 19:40:26

标签: perl yaml

我正在关注此示例Simple example of using data from a YAML configuration file in a Perl script

vihtorr @ w00w / var / www $ cat test.yaml

IPs: [500, 600, 200, 100]

vihtorr @ w00w / var / www $ cat yam2.pl

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

 my $settings = LoadFile('test.yaml');
 print "The IPs are ", $settings->{IPs};

我想知道谁在数组内迭代?

当我执行代码时我得到了

perl yam2.pl 
The IPs are ARRAY(0x166e5e0)

感谢帮助一个菜鸟

2 个答案:

答案 0 :(得分:9)

$settings->{IPs}

包含对数组的引用。使用

取消引用数组
@{ $ref }       # The whole thing
${ $ref }[$i]   # One element
$ref->[$i]      # One element
@{ $ref }[@i]   # Array slice

所以你可以使用

访问数组
@{ $settings->{IPs} }

你得到:

print "The IPs are ", join(', ', @{ $settings->{IPs} }), "\n";

你可能也会穿着

for my $ip (@{ $settings->{IPs} }) {
   ... do something with $ip ...
}

参考文献:

答案 1 :(得分:1)

ARRAY(0x166e5e0)输出显示$ settings-> {IPs}是一个数组引用。您必须取消引用它才能迭代:

for my $ip (@{$settings->{IPs}}) {
   print $ip . "\n";
}

如果你需要做的只是打印,你可以使用join():

print join("\n", @{$settings->{IPs}});