2011-03-10 6 views
3

après avoir été malade pendant quelques semaines j'essaie de revenir dans mes projets de script et semble être en train de courir dans un ralentisseur de débutant. J'essaye d'assembler un script pour slurper un fichier, puis traiter les paramètres du fichier en utilisant regex et construire un hachage à partir des paramètres trouvés.Pourquoi ce hachage ne s'affiche pas correctement?

Mais le problème que je rencontre est que le hachage n'est pas construit comme je le veux, ou du moins je pense que ce n'est pas le cas.

Voici le petit script sur lequel je travaille.

#!/usr/bin/perl 
use strict; 
use warnings; 
use File::Slurp; 
use Data::Dumper; 

my %config; 

my $text = read_file("./config/settings.cfg"); 

if ($text =~ /^esxi\.host\s+=\s+(?<host>.+)/xm) { 
    $config{host} = "$+{host}"; 
} 

print Dumper (%config); 

Pour ceux qui souhaitent exécuter le script ici est le fichier de configuration Je construis

Connection Options: 
###################################################### 
esxi.host = server01 
esxi.port = 22 
esxi.username = root 
esxi.password = password 
###################################################### 

Backup Options: 
######################### 
Compression Options: 
0 = none 
1 = tar 
2 = gzip 
3 = tar+gzip 
######################### 
backup.compression = 0 

Il suffit de l'enregistrer dans un fichier appelé settings.cfg à moins que vous sentez comme changer le paramètre dans le script.

De toute façon c'est la sortie que j'obtiens de Data::Dumper.

$VAR1 = 'server01'; 
$VAR2 = { 
      'host' => 'esxi01' 
     }; 

Ce que je suis en train de faire est de server01 la clé racine du hachage et host une sous-clé parce que je vais aussi sous-clés pour l'utilisateur, mot de passe et numéro de port.

J'ai mâché sur cela pendant environ une demi-heure (en partie distrait) en essayant de comprendre pourquoi il ne fonctionne pas, toute aide serait très appréciée.

Répondre

7

Voulez-vous une sortie comme celle-ci?

$VAR1 = { 
     'server01' => { 
         'host' => 'esxi01' 
        } 
    }; 

Si c'est le cas, votre% config fonctionne correctement. Votre problème est que vous passez un hachage (qui est interprété comme un tableau une liste) plutôt qu'un hashref à Dumper. Essayez plutôt Dumper(\%config).

+1

Exactement ce que je veux – ianc1215

+1

Vous plaisantez ... Je pensais que ce serait simple mais un "\" manquant est ridicule. En tout cas merci pour l'aide fonctionne bien maintenant. – ianc1215

+2

's/array/list /' –

Questions connexes