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 = [
              '/置き場/'、
              「/ホーム/フィラス/」
            ];
    アレイ(0x8470d6c)

ご覧のとおり、ループは1つのアイテムを出力しており、配列と見なされます。私は正しい方法でそれをやっていますか?

4

2 に答える 2

15

$conf->{dirs}問題は、配列ではなく、arrayrefであると思います。これを試して:

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

Dumpクラス メソッドを使用してData::Dumper. 2 つの無名配列を指定します。1 つ目はダンプするもののリストで、2 つ目は の代わりに変数に付ける名前のリストです$VARn。名前の前に を付けると*Dumpデータ型が特定され、参照ではなくその型として書き込まれます。

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

へのメンタルマッピングを行う必要がないため、出力はより正確にあなたが持っているものを表しています@dirs。これで、要素が 1 つの配列であることが簡単にわかります。

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