3

我正在关注这个示例在 Perl 脚本中使用 YAML 配置文件中的数据的简单示例

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)

感谢您帮助菜鸟

4

2 回答 2

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 ...
}

参考:

于 2012-07-18T19:48:13.500 回答
1

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

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

如果您只需要打印,您可以使用 join():

print join("\n", @{$settings->{IPs}});
于 2012-07-18T19:47:24.203 回答