Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème fonction exportée d'un module

3 réponses
Avatar
paul POULAIN
Bonjour,

J'ai un problème qui me semble pour le moins bizarre...

soit un package A.pm, et un package B.pm

B.pm contient "use A;"

et fait appel à une fonction ModReserveStatus qui est dans A, et qui est
bien exportée :
@EXPORT = qw(
...
&ModReserveStatus
...
);

Sauf que, lorsque le script s'exécute, il dit "Undefined subroutine
&B::ModReserveStatus"

Il n'y a évidemment pas ModReserveStatus dans @EXPORT de B.pm, je ne
comprends pas bien ce qui se passe...

Si quelqu'un peut éclairer ma lanterne, je sens que c'est une erreur
classique

PS : les autres fonction de B.pm fonctionnent parfaitement bien :-(

--
Paul

3 réponses

Avatar
Paul Gaborit
À (at) Tue, 18 Sep 2007 16:51:40 +0200,
paul POULAIN écrivait (wrote):
J'ai un problème qui me semble pour le moins bizarre...

soit un package A.pm, et un package B.pm

B.pm contient "use A;"

et fait appel à une fonction ModReserveStatus qui est dans A, et qui est
bien exportée :
@EXPORT = qw(
...
&ModReserveStatus
...
);

Sauf que, lorsque le script s'exécute, il dit "Undefined subroutine
&B::ModReserveStatus"

Il n'y a évidemment pas ModReserveStatus dans @EXPORT de B.pm, je ne
comprends pas bien ce qui se passe...


Sans voir plus de code, on peut imaginer plein de raisons... La
première qui me vient à l'esprit est qu'il manque peut-être les lignes
suivantes (selon la doc de 'Exporter') dans le module A :

require Exporter;
@ISA = qw(Exporter);

Une autre raison : le fichier A.pm lu par Perl n'est pas celui que
vous croyez...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
paul POULAIN
Paul Gaborit wrote:
Sans voir plus de code, on peut imaginer plein de raisons... La
première qui me vient à l'esprit est qu'il manque peut-être les lignes
suivantes (selon la doc de 'Exporter') dans le module A :

require Exporter;
ca , ca y est

@ISA = qw(Exporter);
ca aussi...


Une autre raison : le fichier A.pm lu par Perl n'est pas celui que
vous croyez...


Tiens, une explication possible : dans B.pm, il y a 2 fois "use A;". Est-ce
que ca peut expliquer le problème ?
--
Paul

Avatar
Paul Gaborit
À (at) Tue, 18 Sep 2007 18:08:51 +0200,
paul POULAIN écrivait (wrote):
Paul Gaborit wrote:
Sans voir plus de code, on peut imaginer plein de raisons... La
première qui me vient à l'esprit est qu'il manque peut-être les lignes
suivantes (selon la doc de 'Exporter') dans le module A :

require Exporter;
ca , ca y est

@ISA = qw(Exporter);
ca aussi...



Bon. Mauvaise pioche. Il faut que je change ma boule de cristal. ;-)

Une autre raison : le fichier A.pm lu par Perl n'est pas celui que
vous croyez...


Tiens, une explication possible : dans B.pm, il y a 2 fois "use A;". Est-ce
que ca peut expliquer le problème ?


Non (le deuxième 'use' est une simple no-op).

Pas de warnings ? Avez-vous vérifiez partout le nom de la méthode ?
Avez-vous tenter de supprimer tout le code inutile pour essayer
d'isoler le bug ? Pouvez-vous nous monter le résultat de cette
isolation ?

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>