Perl 为什么从YAML配置中获取数组(0x8470d6c)而不是列表?

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

我有这个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 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或)