2011-09-05 2 views
0

J'ai mon principal script Perl qui contientComment accéder à un hachage dans l'espace de noms principal à l'intérieur d'un module

my $System = { 
    Path => 
    { 
     root => 'hello' 
    } 
} 

print $System->{'Path'}->{'root'}; # prints 'hello' 

Comment puis-je accéder à la variable $System->{'Path'}->{'root'} d'un module externe?

Je sais que je peux utiliser l'espace de noms main:: pour récupérer des variables globales, telles que $main::x, mais ce qui suit ne fonctionne pas: $main::System->{'Path'}->{'root'}.

J'ai essayé aussi différentes syntaxes mais je ne suis pas capable de l'obtenir.

Qu'est-ce que je fais mal?

+0

lexicales variables (') de my' n'existent pas dans un espace de noms package. – ikegami

Répondre

2

Les variables déclarées avec my ont uniquement une portée lexicale et ne sont pas visibles dans un package. Déclarez-le avec our à la place.

+0

Cela changera-t-il quelque chose dans mon script principal si je déclare la variable de cette façon? –

+2

Oui, la portée est élargie donc le comportement est différent. Cela pourrait conduire à des bugs. Ne changez pas seulement la ligne, faites un effort pour comprendre où l'identificateur '$ System' est valide et faites tester votre programme. – daxim

1

"Faire face à la détermination de la portée":

http://perl.plover.com/FAQs/Namespaces.html 
Questions connexes