2010-12-07 35 views
1

J'ai fait un module Perl MyModule.pm il a quelques sous-programmes getText que je voulais appeler dans un script shell. J'ai essayé de la manière suivante mais cela donne une erreur;appel perl sous-programme dans le script shell

SEC_DIR=`perl -MMyModule -e 'getText'`; # line 1 
echo $SEC_DIR 
exit 0 

Erreur retournée;

Can't locate MyModule.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .). 

Échec du BEGIN - compilation annulée. PS: Les fichiers .pm et .sh sont au même emplacement. quelques autres options que j'ai essayées;

ligne 1:

SEC_DIR=`perl -MMyModule -e '&getText'`; 
SEC_DIR=`perl -MMyModule -e 'use MyModule; getText'`; 
SEC_DIR=`perl -e 'use MyModule; getText'`; 

Répondre

3

Il est difficile de dire ce qui a tort de ne pas savoir ce qui est dans MyModule.pm.

@INC semble ok (. est dans la liste, donc il ne devrait pas y avoir de problème avec la localisation MyModule.pm dans le répertoire en cours).

Voici un exemple minimal qui fonctionne comme vous l'avez décrit. J'espère que cela aide.

$ cat SomeModule.pm 
package SomeModule; 

sub testsub 
{ 
    return "it works\n"; 
} 

1; 
$ VAL=`perl -I. -MSomeModule -e 'print SomeModule::testsub'` 
$ echo $VAL 
it works 

Une autre façon de charger le module serait:

$ perl -e 'require "./SomeModule.pm"; print SomeModule::testsub()' 
it works 
+0

Merci pour votre réponse, mais quand j'utiliser votre code avec un « » après 'je', alors il montre la même erreur, cependant quand je supprime '.' ça ne fait rien. Le sous-programme getText retourne un chemin de fichier. – haris

+0

Je l'ai testé sur Ubuntu 10.10, avec perl 5.10.1. Avec '-I.' le répertoire courant est juste recherché pour les modules avant tout autre répertoire. – TomaszK

+0

TIMTOWTDI: 'perl -e 'do" ./MonModule.pm "; getText'' –