Perl 为什么从YAML配置中获取数组(0x8470d6c)而不是列表?
我有这个YAML文件:Perl 为什么从YAML配置中获取数组(0x8470d6c)而不是列表?,perl,yaml,Perl,Yaml,我有这个YAML文件: name: Firas dirs: [/bin/, /home/phiras/] 我正在用perl解析这个文件,访问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 confi
name: Firas
dirs: [/bin/, /home/phiras/]
我正在用perl解析这个文件,访问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)
菲拉斯
$VAR1=[
“/bin/”,
“/home/phiras/”
];
阵列(0x8470d6c)
如您所见,循环正在打印一个项目,它被视为数组。我这样做对吗?我认为问题在于
$conf->{dirs}
是一个arrayref,而不是一个数组。试试这个:
my @dirs = @{$conf->{dirs}};
我认为问题在于
$conf->{dirs}
是一个arrayref,而不是一个数组。试试这个:
my @dirs = @{$conf->{dirs}};
我喜欢使用
Dump
类方法来Data::Dumper
。你给它两个匿名数组。第一个是要转储的内容列表,第二个是要提供变量的名称列表,而不是$VARn
。如果名称前面有一个*
,Dump
计算出数据类型,并将其作为该类型而不是引用写入:
print Data::Dumper->Dump( [ \@dirs ], [ qw(*dirs) ] );
输出更准确地表示您所拥有的内容,因为您不必进行心理映射回到@dirs
。现在很容易看到您有一个单元素数组:
@dirs = (
[
'/bin/',
'/home/phiras/'
]
);
我喜欢使用
Dump
类方法来Data::Dumper
。你给它两个匿名数组。第一个是要转储的内容列表,第二个是要提供变量的名称列表,而不是$VARn
。如果名称前面有一个*
,Dump
计算出数据类型,并将其作为该类型而不是引用写入:
print Data::Dumper->Dump( [ \@dirs ], [ qw(*dirs) ] );
输出更准确地表示您所拥有的内容,因为您不必进行心理映射回到@dirs
。现在很容易看到您有一个单元素数组:
@dirs = (
[
'/bin/',
'/home/phiras/'
]
);
@Firas-如果有人给了你答案,你应该点击问题旁边的复选标记,接受他们的答案为正确。@Firas-如果有人给了你答案,你应该点击问题旁边的复选标记,接受他们的答案为正确。查看数据结构烹饪书(perldoc perldsc或)查看数据结构手册(perldoc perldsc或)