1

我有这个 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";
}

输出是:

    菲拉斯
    $VAR1 = [
              '/bin/',
              '/home/phiras/'
            ];
    数组(0x8470d6c)

如您所见,循环正在打印一项,它被视为数组。我做对了吗?

4

2 回答 2

15

我认为问题在于它$conf->{dirs}是一个arrayref,而不是一个数组。试试这个:

my @dirs = @{$conf->{dirs}};
于 2009-12-24T13:31:01.920 回答
1

我喜欢使用Dump类方法来Data::Dumper. 你给它两个匿名数组。第一个是要转储的东西的列表,第二个是提供变量的名称列表,而不是$VARn. 如果您在名称前加上 a *Dump则计算出数据类型并将其写为该类型而不是引用:

 print Data::Dumper->Dump( [ \@dirs ], [ qw(*dirs) ] );

输出更准确地代表了您所拥有的,因为您不必将心智映射回@dirs. 现在很容易看出你有一个单元素数组:

@dirs = (
          [
            '/bin/',
            '/home/phiras/'
          ]
        );
于 2009-12-25T04:52:32.607 回答