2009-12-24 3 views
1

나는이 YAML 파일이 있습니다왜 YAML 구성의 목록 대신 ARRAY (0x8470d6c)가 표시됩니까?

name: Firas 
dirs: [/bin/, /home/phiras/] 

I이 파일을 구문 분석 펄에 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) 

당신은 루프가 하나 개의 항목을 인쇄하고이 배열로 간주됩니다 볼 수 있습니다. 내가 바른 방법으로하고 있니?

+1

체크 아웃 데이터 구조 요리 책 (perldoc을의 perldsc 또는 http://perldoc.perl.org/perldsc.html) – daotoad

답변

15

나는 $conf->{dirs}이 배열이 아니라 배열이라고 생각합니다. 이 시도 :

my @dirs = @{$conf->{dirs}}; 
+1

예 당신이 맞다 : 이제 당신은 하나 개의 요소 배열을 가지고 있음을 쉽게 알 수있다. – Firas

+2

@Firas - 다른 사람이 답을주는 경우 질문 옆에있는 체크 표시를 클릭하여 답을 올바르게 수락해야합니다. –

1

내가 Data::DumperDump 클래스 메소드를 사용하는 것을 좋아합니다. 익명의 배열 두 개를 제공합니다. 첫 번째는 덤프 할 항목 목록이고 두 번째는 $VARn 대신 변수를 제공하는 이름 목록입니다. 이 데이터 유형 밖으로 *, Dump 수치와 이름 앞에 대신 참조의 유형으로 쓰는 경우 :

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

출력은 더 정확하게 당신이 할 필요가 없기 때문에 무엇을 나타냅니다 정신 매핑을 @dirs으로 되 돌린다.

@dirs = (
      [ 
      '/bin/', 
      '/home/phiras/' 
      ] 
     ); 
관련 문제