[Perl] Voir tout ce qui est importé dans l'espace de nom courant?

Voir tout ce qui est importé dans l'espace de nom courant? [Perl] - Perl - Programmation

Marsh Posté le 31-10-2005 à 10:24:38    

Salut,
 
Tout est dans le titre.
 
Je voudrais savoir s'ile xiste sous Perl un moyen de voir tous les symboles qui sont importés dans l'espace de nom courant.
 
Par exemple, si je fais un
 

Code :
  1. package Mypack;
  2. use HTML::Entities;


 
J'aimerais trouver un moyen de savoir quels sont les noms qui sont effectivement importés et à quoi ils réfèrent...
 
Merci
 
 

Reply

Marsh Posté le 31-10-2005 à 10:24:38   

Reply

Marsh Posté le 03-11-2005 à 11:37:34    

normalement tout est dis dans le pod du module (perldoc HTML::Entities ou la doc HTML sur search.cpan.org).
 
Si tu ne veux rien importer tu peux faire ca:
use HTML::Entities ();
 
ou indiquer explicitement entre parenthese ce que tu veux importer.
 
Dans le cas de HTML::Entities il me semble qu'il explorte deux fonction par defaut pour encoder et decoder
 
sinon pour voir les symboles il y a une table de hash special mais il vaut mieux eviter ce genre de bidouille

Reply

Marsh Posté le 03-11-2005 à 11:43:34    

Merci pour ta réponse.
 
Oui, oui, je sais bien, a priori, comment marche un Use.
 
Mais si je pose la question, c'est parce que des fois, j'ai l'impression que ça marche mal. Ou alors je fais une mauvaise manip.
 
Par exemple, voici l'un de mes modules:
 

Code :
  1. package MyUtils::MyUtil;
  2. use Exporter qw(import);
  3. @EXPORT = qw(showArgs showAutoLoad);
  4. sub showArgs{...}


 
Et après, lorsque je fais dans un Page Web un appel du genre:
 

Code :
  1. <%Perl>
  2. use MyUtils::MyUtil;
  3. showArgs(1, "Hello.html" );
  4. </%Perl>


 
Il me dit qu'il ne peut pas trouver Mason::Commands::showArgs (j'utilise Mason au dessus de mod_Perl, mais peut importe je pense dans le cas présent)
 
Par contre, si je fais un

Code :
  1. MyUtils::MyUtil::showArgs

ça marche parfaitement... C'est bizarre, non?
 
D'autre part, je sais que dans le perldoc, il est indiqué tout ce qui est exporté, mais ça ne reste que des docs, et des fois, j'utilise peut être une mauvaise version d'un composant, donc, je préfère savoir en temps réels, juste pour des tests, ce qui est importé...

Reply

Marsh Posté le 03-11-2005 à 13:57:32    

le Exporter il vaut mieux l'utiliser comme base qu'importer le import:
use base "Exporter";
 
pour le coup de Mason tu a essayé de faire la meme chose dans un script? Pasque effectivement ca peut avoir une consequence vu que le code n'est pas executé de la meme facon (eval)

Reply

Marsh Posté le 03-11-2005 à 14:03:15    

Bah écoute, en fait, le truc, c'est que des fois, ça marche, des fois ça marche pas...
 
Je ne sais aps si tu connais un peu Mason (mais je pense que oui ;) ), mais par exemple, quand je fais un
$r->$s->server_admin, des fois ça marche, et des fois, il me dit qu'il ne peut pas exécuter la méthode server_admin pour Apache2::RequestRec... Ca doit dépendre de ce qu'il y dans l'espace de nom je suppose...  
Bref, c'est pour ça que je cherchais un moyen d'avoir accès à tout ce qui est importé, en temps réel, pour faire des tests lorsque ça ne marche pas... (un genre de "debug" avec une sortie dans un fichier annexe) Car c'est vrai qu'avec cette surcouhe "Mason", je suis un petit peu perdu (déja que je suis nouveau sur Perl - mais je maîtrise déjà pas mal le langage) et sur mod_Perl (j'essaie de me dépatouiller en comprenant quand est ce qu'un nouveau Child est créé, comment marche la mise en mémoire des variables selon qu'il y ait un BEGIN ou non, etc...)
 
Tu me parlais plus haut d'un hash... Tu as son nom?

Reply

Marsh Posté le 03-11-2005 à 14:31:44    

Je ne connait pas Mason, désolé (je ne fais pas de developpement web).
 
Pour la fameuse hash c'est simplement le nom du module suivit de ::
 
exemple pour el package main (le package principale de ton programme) :
 
use Data::Dumper;
print Dumper \%main::;

Reply

Marsh Posté le 03-11-2005 à 14:34:48    

D'accord!
 
Je vais tester ça :)
 
Pour Mason, désolé, tu donnais l'impression de connaître, vu que tu savais que c'était exécuté dans un eval :D
 
Par contre, Perl, tu connais bien? Et tu utilises pour autre chose que du Web?

Reply

Marsh Posté le 03-11-2005 à 14:55:44    

ouai je l'utilise pour faire des appli

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed