2009-12-24 7 views
1

je ce fichier YAML:Pourquoi ai-je ARRAY (0x8470d6c) au lieu d'une liste de ma configuration YAML?

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

J'utilise YAML::Syck en Perl pour analyser ce fichier, et j'ai un problème avec l'accès aux éléments de dirs. mon code est:

#!/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"; 
} 

la sortie est:

 
    Firas 
    $VAR1 = [ 
       '/bin/', 
       '/home/phiras/' 
      ]; 
    ARRAY(0x8470d6c) 

que vous pouvez voir la boucle est l'impression d'un élément et il est considéré comme tableau. est-ce que je le fais de la bonne façon?

+1

Découvrez les structures de données livre de recettes (perldoc perldsc ou http://perldoc.perl.org/perldsc.html) – daotoad

Répondre

15

Je pense que le problème est que $conf->{dirs} est un arrayref, pas un tableau. Essayez ceci:

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

Oui, vous avez raison. – Firas

+2

@Firas - Si quelqu'un vous donne la réponse, vous devez cliquer sur la coche à côté de la question pour accepter leur réponse comme correcte. –

1

J'aime utiliser la méthode de classe Dump à Data::Dumper. Vous lui donnez deux tableaux anonymes. La première est une liste de choses à sauvegarder, et la seconde est la liste des noms à donner aux variables au lieu de $VARn. Si vous faites précéder le nom d'un *, Dump chiffres sur le type de données et écrit comme ce type au lieu d'une référence:

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

La sortie représente plus précisément ce que vous avez puisque vous ne devez pas faire la la cartographie mentale revient à @dirs. Maintenant, il est facile de voir que vous avez un tableau à une élément:

@dirs = (
      [ 
      '/bin/', 
      '/home/phiras/' 
      ] 
     );