我有这个YAML文件:
name: Firas
dirs: [/bin/, /home/phiras/]
我在perl中使用YAML::Syck来解析此文件,我在访问dirs项时遇到问题。我的代码是:
#!/usr/local/bin/perl
use strict;
use warnings;
use YAML::Syck;
use ConfigLoader;
use Data::Dumper;
my $conf = LoadFile("myconf.yml") || die("Error: Open config file \n");
print $conf->{name}, "\n";
my @dirs = $conf->{dirs};
print Dumper @dirs;
foreach(@dirs){
print "$_\n";
}
输出是:
Firas $VAR1 = [ '/bin/', '/home/phiras/' ]; ARRAY(0x8470d6c)
如您所见,循环正在打印一个项目,它被视为数组。我是以正确的方式做到的吗?
答案 0 :(得分:15)
我认为问题是$conf->{dirs}
是一个arrayref,而不是一个数组。试试这个:
my @dirs = @{$conf->{dirs}};
答案 1 :(得分:1)
我喜欢将Dump
类方法用于Data::Dumper
。你给它两个匿名数组。第一个是要转储的事物列表,第二个是给变量而不是$VARn
的名称列表。如果您在名称前加上*
,Dump
会计算出数据类型并将其写为该类型而不是引用:
print Data::Dumper->Dump( [ \@dirs ], [ qw(*dirs) ] );
输出更准确地表示您拥有的内容,因为您不必将心理映射返回到@dirs
。现在很容易看出你有一个单元素数组:
@dirs = (
[
'/bin/',
'/home/phiras/'
]
);