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

pb passage paramètres à une fonction dans un package

3 réponses
Avatar
paul POULAIN
Bonjour,

Dans un package appelé C4::Context, j'ai la fonction suivante :

sub set_userenv
{
my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch,
$userflags)= @_;
warn "SETTING : $usernum, $userid, $usercnum, $userfirstname, $usersurname,
$userbranch, $userflags";

...

}


Lorsque je l'appelle depuis un autre package :
C4::Context->set_userenv($bornum,$userid,$cardnumber,$firstname,$surname
$branchcode,$userflags);

Je vois dans le warn que le 1er paramètre ($usernum donc) contient
"C4::Context" au lieu du 1er paramètre passé.
$userid contient ensuite le 1er paramètre...

A quoi cela peut-il être dû ?


PS : la fonction n'est pas exporté explicitement, mais je ne vois pas
pourquoi cela aurait un effet. Bon, maintenant, je me mélange parfois un
peu les pinceaux dans les packages, malgré les 2 bouquins d'Oreilly à
portée de main :-(
--
Paul

3 réponses

Avatar
Paul Gaborit
À (at) Tue, 26 Jul 2005 14:16:37 +0200,
paul POULAIN écrivait (wrote):
Dans un package appelé C4::Context, j'ai la fonction suivante :

sub set_userenv
{
my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch,
$userflags)= @_;
warn "SETTING : $usernum, $userid, $usercnum, $userfirstname, $usersurname,
$userbranch, $userflags";

...

}

Lorsque je l'appelle depuis un autre package :
C4::Context->set_userenv($bornum,$userid,$cardnumber,$firstname,$surname
$branchcode,$userflags);

Je vois dans le warn que le 1er paramètre ($usernum donc) contient
"C4::Context" au lieu du 1er paramètre passé.
$userid contient ensuite le 1er paramètre...

A quoi cela peut-il être dû ?


Vous utilisez la syntaxe d'appel à une méthode de classe alors que
vous voulez appeler une fonction !

Si vous faites :

C4::Context::set_userenv($bornum,$userid,$cardnumber, ...

ça marchera comme vous le souhaitez. C'est la syntaxe d'appel à une
fonction d'un package.

Lorsqu'on utilise la syntaxe d'appel à une méthode (donc avec '->' au
lieu de '::'), le premier paramètre reçu (et passé implicitement) est
toujours le nom de la classe (méthode de classe) ou l'objet lui-même
(méthode d'objet).

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

Avatar
paul POULAIN
Paul Gaborit wrote:

Vous utilisez la syntaxe d'appel à une méthode de classe alors que
vous voulez appeler une fonction !


Paul se sent tout confus...
--
Paul

Avatar
Klaus Eichner
"paul POULAIN" wrote in message
news:dc5gja$25g0$
Paul Gaborit wrote:

Vous utilisez la syntaxe d'appel à une méthode de classe alors que
vous voulez appeler une fonction !


Paul se sent tout confus...
--
Paul


Pour des explications sur les deux façons d'appel...

1.) appel à une méthode de classe
2.) appel à une fonction

...voir http://perl.enstimac.fr/DocFr/perlobj.html#invocation%20de%20méthode

--
Klaus