为什么我得到ARRAY(0x8470d6c)而不是我的YAML配置中的列表?

时间:2009-12-24 13:26:16

标签: perl yaml

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

如您所见,循环正在打印一个项目,它被视为数组。我是以正确的方式做到的吗?

2 个答案:

答案 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/'
          ]
        );