utilisation d'un module perso avec active perl

utilisation d'un module perso avec active perl - Perl - Programmation

Marsh Posté le 22-03-2003 à 10:18:10    

Salut, je suis un bon gros débutant en perl et je suis en train de me battre pour utiliser un module. Je suis sous windows XP et j'utilise active perl installé ici(F:\Perl\).  
Je souhaite utiliser un module qui se trouverait dans le meme repertoire que le fichier "Extraction.pl" (F:\programmation\tp_systeme\tp06\Extraction.pl). Deja est ce que active perl autorise cela ou est-ce qu'il faut obligatoirement entreposer les modules dans le rep (F:\Perl\lib\)? Sinon puisque perl ne trouve pas la fonction que je souhaite utiliser je me suis dit que peut-etre mes entetes sont faux, donc les voici :  
 
le module "module.pm" :
"package module;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(ExtraireSource);
 
 
sub ExtraireSource{....
}
"
 
et le prog "Extraction.pl" :  
"use module;
$Source= $ARGV[0];#nom du fichier à traiter
%l = ExtraireSource($Source);"
 
voila et avec ca perl me dit qu'il ne trouve rien :( merci d'avance @+.

Reply

Marsh Posté le 22-03-2003 à 10:18:10   

Reply

Marsh Posté le 22-03-2003 à 12:18:23    

j'ai trouvé un premier élément de répone ici :
http://forum.hardware.fr/forum2.ph [...] subcat=392
cependant meme apres c modifs ca ne marche pas :(
voila le contenu de mes 2 fichiers :  
module.pm :
package module;
use vars qw(@ISA @EXPORT);
use Exporter;
@ISA=qw(Exporter);
@EXPORT=qw(extract);
 
sub extract{
$fichierSource = $_[0];
 open(LECT,"<$fichierSource" );
 %res=();
 while($ligneLue = <LECT> ){
  if($ligneLue=~/\w*\.c$/){
    $res{$&}=1;    
  }#if
 }#while
 print "$res";
 return %res;  
}
1;
 
Extraction.pl
 
use module;
%l = extract($ARGV[0]);
@k = keys(%l);
print "@k";
 
 
Je craque !@+

Reply

Marsh Posté le 22-03-2003 à 16:09:21    

tu dit que module.pm et extraction.pm sont dans le meme repertoire? ca devrait marcher alors??!
 
Ben verifie que ton @INC contient bien "."
 
sinon qq conseils:
-utilise "use strict"
-met une majuscule à ton module (les minuscules c'est pour les modules de base)
-met tes modules persos dans un repertoir 'lib' dans le repertoire de ton script et fait un "use lib qw(lib)" dans ton script, ou alors un :

Code :
  1. BEGIN { unshift @INC, "lib"};


 
peut etre qu'un module nommé "module.pm" est deja installé dans ton lib/ ou ton site/lib, et donc c'est celui la que prendra perl en premier
l'ordre de ton @INC normalement c'est:

Code :
  1. F:/perl/lib
  2. F:/perl/site/lib
  3. .


Message édité par pospos le 22-03-2003 à 16:10:19
Reply

Marsh Posté le 22-03-2003 à 17:18:33    

C'est quoi le @INC?
Sinon il sont bien dans le meme rep et j'ai changé le nom en modulegh.pm pour éviter que le use pointe vers autre chose et ca ne marche toujours pas, j'ai encore ce message :  
Undefined subroutine &main::extract called at Extraction.pl line 3.
et à la ligne 3 j'ai mon appel a extract, je capte pas merci @+

Reply

Marsh Posté le 22-03-2003 à 18:26:49    

le @INC c'est la ou perl regarde pour savori ou aller chercher les modules. Donc si tu veux k'il regarde dans ton repertoir courant il faut absolument que @INC contienne '.'
 
essai "use lib qw(.)" pour voir

Reply

Marsh Posté le 23-03-2003 à 10:22:33    

finalement apres m'etre un peu focalise sur le @inc pendant une demi heure je me suis rendu compte que j'avais oublié de changé le "package module;" en tete de fichier j'ai fait mon bon gros boulet sur ce coup la.... quoiqu'il en soit merci à toi @+

Reply

Sujets relatifs:

Leave a Replay

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