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

Passage d'arguments

5 réponses
Avatar
Pada
Hello

Je fais un bot IRC en Perl actuellement avec le module
POE::Component::IRC.

En local, sur Win, j'utilisais ceci au d=E9but des fonctions pour
r=E9cup=E9rer les arguments pass=E9s :

my ($who, $tgt, $msg) =3D @_[ ARG0, ARG1, ARG2 ];

(c'est ce qui est conseill=E9 dans l'aide, ils mettent leurs exemples
comme ca.. : POE ->
http://search.cpan.org/~bingos/POE-Component-IRC-4.69/lib/POE/Component/IRC=
.pm
)

J'ai pass=E9 mon bot sur un shell, tous les modules n=E9cessaires sont
charg=E9s, mais cette syntaxe ne fonctionne pas :

Argument "ARG0" isn't numeric in array slice at Bot.pl line 228 (#1)
(idem pour ARG1 ARG2)

Sur Win comme sur le shell, la version de Perl est 5.8.7 ...
Comment puis je faire pour que ca marche m=EAme sur le shell ? Merci
d'avance.

Pada

5 réponses

Avatar
Paul Gaborit
À (at) 9 Oct 2005 04:39:14 -0700,
"Pada" écrivait (wrote):
[...]
my ($who, $tgt, $msg) = @_[ ARG0, ARG1, ARG2 ];


my ($who, $tgt, $msg) = @_[0, 1, 2 ];

ou

my ($who, $tgt, $msg) = @_[0..2];

ou

my ($who, $tgt, $msg) = @_;

La ligne donnée dans le SYNOSPIS ne peut pas fonctionner...

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

Avatar
Patrick Mevzek
À (at) 9 Oct 2005 04:39:14 -0700,
"Pada" écrivait (wrote):
[...]
my ($who, $tgt, $msg) = @_[ ARG0, ARG1, ARG2 ];


my ($who, $tgt, $msg) = @_[0, 1, 2 ];


Non, et pas non plus les autres solutions.

La ligne donnée dans le SYNOSPIS ne peut pas fonctionner...


Pourquoi ?
Les constantes sont définies dans POE::Session et classiques en POE
sub ARG0 () { 9 }
sub ARG1 () { 10 }
sub ARG2 () { 11 }

etc...

Où l'on voit donc d'ailleurs que ARG0 != 0, ARG1 !=1, etc...

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>


Avatar
Patrick Mevzek
J'ai passé mon bot sur un shell, tous les modules nécessaires sont
chargés, mais cette syntaxe ne fonctionne pas :

Argument "ARG0" isn't numeric in array slice at Bot.pl line 228 (#1)
(idem pour ARG1 ARG2)


Un
use POE::Session;
quelque part, devrait résoudre le problème.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>

Avatar
Paul Gaborit
À (at) Mon, 10 Oct 2005 14:35:37 +0200,
Patrick Mevzek écrivait (wrote):
À (at) 9 Oct 2005 04:39:14 -0700,
"Pada" écrivait (wrote):
[...]
my ($who, $tgt, $msg) = @_[ ARG0, ARG1, ARG2 ];


my ($who, $tgt, $msg) = @_[0, 1, 2 ];


Non, et pas non plus les autres solutions.


...Exact...

La ligne donnée dans le SYNOSPIS ne peut pas fonctionner...


Pourquoi ?
Les constantes sont définies dans POE::Session et classiques en POE


Ça m'apprendra à lire une doc trop rapidemement... Des noms
entièrement en majuscules auraient du me mettre la puce à l'oreille
(ce sont en général des constantes ou des filehandle).

Le PO doit avoir oublié le 'use ...' qui va bien :

use POE qw(Component::IRC);

(tiré du SYNOSPIS)

sub ARG0 () { 9 }
sub ARG1 () { 10 }
sub ARG2 () { 11 }

etc...

Où l'on voit donc d'ailleurs que ARG0 != 0, ARG1 !=1, etc...


Sur la version que je viens d'installer pour tester, ARG0 vaut 10,
ARG1 vaut 11, etc. Il est donc *très* fortement conseillé d'utiliser
ces constantes (ARG0, ARG1...) au lieu des valeurs directes (10,
11,...) puisqu'elles peuvent changer d'une implémentation/version à
une autre. ;-)

Merci pour la mise au point.

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



Avatar
Pada
Merci beaucoup pour ces infos, ca semble marcher désormais
(je suis reparti du bot de base fourni avec use POE qw(Component::IRC);
et j'ai rajoute POE::Session et ca roule)