Je voudrais utiliser une variable declaree dans une sub dans une autre sub (appelée a partir de la 1ere sub). Un truc ds le genre :
use strict;
...
sub affect
{
my $toto = "hello world !";
print ();
}
sub print
{
print $toto;
}
QQun pourrait m'expliquer comment faire ?
merci.
hihi
Publicité
Posté le 18-03-2002 à 16:06:17
deepcore
Posté le 18-03-2002 à 16:10:52
Si mes souvenir sont bon, tu déclares ta variable en "local" au lieu de "my" et elle sera visible par les sub que tu appéleras de la fonction où tu a déclaré ta variable. Mais le plus propre, c'est quand même de passer par paramètre.
---------------
"Si ça peut déconner, ça va déconner..."
impulse
Posté le 18-03-2002 à 16:15:15
J'ai essayé local et de passer en parametres et j'ai une erreur : requires explicit package name... je crois que j'ai un pb ailleurs
hihi
deepcore
Posté le 18-03-2002 à 16:20:16
J'suis pas un spécialiste mais je pense que ça vient de tes "use". Fait voir ton code...
---------------
"Si ça peut déconner, ça va déconner..."
Tentacle
Posté le 18-03-2002 à 16:21:56
impulse a écrit a écrit :
J'ai essayé local et de passer en parametres et j'ai une erreur : requires explicit package name... je crois que j'ai un pb ailleurs
hihi
il doit te donner un numero de ligne a ce moment-là... regarde ou ça se trouve
impulse
Posté le 18-03-2002 à 16:29:05
J'utilise des modules mais je crois pas que ce soit ça le pb...
quand je passe en param j'ai cette erreur : use of uninitialized value in pattern match (et substitution et print). Alors que mes parametres sont bien passes... j'ai deja eu un pb comme ça il me semble mais je me souviens pas comment le resoudre.
hihi
deepcore
Posté le 18-03-2002 à 16:32:34
L'idéal, c'est que file ton code et ton message d'erreur, ce sera plus simple.
---------------
"Si ça peut déconner, ça va déconner..."
impulse
Posté le 18-03-2002 à 16:33:31
tentacle > oui bien sur : le compilo m'indique la ligne. La variable qui a besoin du nom de package est $toto (dans mon exemple).
quand je passe en param je fais ça :
use strict; ...
sub affect { my $toto = "hello world !"; print ($toto); }
sub print { my $text = $_[0]; print $text; <- use of uninitialized value in print
}
hihi
impulse
Posté le 18-03-2002 à 16:37:04
Deepcore > mon code est top secret
Non en fait je sais ou est le pb et ça sert a rien que je file tout mon code (y'en a pas mal et j'ai simplifie au max la).
Je voudrais passer en param mais j'ai ce pb de var non initialisée...
hihi
deepcore
Posté le 18-03-2002 à 16:53:43
Ben écoute, là, je vois pas trop. Par contre c'est pas trop conseillé d'utiliser $_[o], utilise @_ c'est plus cool . Enfin, c'est mon avis.
---------------
"Si ça peut déconner, ça va déconner..."
Publicité
Posté le 18-03-2002 à 16:53:43
Tentacle
Posté le 18-03-2002 à 16:57:15
Deepcore a écrit a écrit :
Ben écoute, là, je vois pas trop. Par contre c'est pas trop conseillé d'utiliser $_[o], utilise @_ c'est plus cool . Enfin, c'est mon avis.
c'est la même chose non?
$_[0] c'est récupérer le premier élément du tableau @_
C'est que l'on peut faire aussi shift @_ mais ça revient au même
impulse
Posté le 18-03-2002 à 16:59:34
oki Deepcore... merci pour ton aide (je crois que j'ai pas vraiment tapé du bon code, va falloir que je reprenne ça ).
Pour le passage de parametres : j'ai appris Perl (et je continue tous les jours bien sur) avec le camel book et c'est comme ça qu'ils font dedans... et c'est un peu la reference ce bouquin.
hihi
impulse
Posté le 18-03-2002 à 17:01:37
Oui et en + je dis n'importe quoi : tentacle a tout a fait raison, j'utilise @_ en faisant $_[0] => je prends le 1er element de l'array qui contient les params...
hihi -_-
Tentacle
Posté le 18-03-2002 à 17:06:28
mmm Au fait tu as pensé au fait que ce n'est peut-être pas très bon de redéclarer la fonction print? enfin il me semble
deepcore
Posté le 18-03-2002 à 17:53:30
impulse a écrit a écrit :
Oui et en + je dis n'importe quoi : tentacle a tout a fait raison, j'utilise @_ en faisant $_[0] => je prends le 1er element de l'array qui contient les params...
hihi -_-
Je dis pas que c'est faux (se serait con puisque c'est bon) mais j'ai lu à plusieurs reprises que c'était pas top de faire comme ça.
Tentacle> le "shift" ne sert à rien: $a = @_
---------------
"Si ça peut déconner, ça va déconner..."
Tentacle
Posté le 18-03-2002 à 18:06:47
Deepcore a écrit a écrit :
Je dis pas que c'est faux (se serait con puisque c'est bon) mais j'ai lu à plusieurs reprises que c'était pas top de faire comme ça.
Tentacle> le "shift" ne sert à rien: $a = @_
dans le cas present c'est vrai c'est dans le cas où il y a plusieurs arguments qu'on utilise cela.
Mais je vois pas pourquoi ce ne serait pas le top d'utiliser $_[0] vu que c'est l'accès normal à un tableau. Sinon ya aussi (dans le cas de plusieurs arguments) my ($a, $b, $c) = @_;
impulse
Posté le 19-03-2002 à 09:53:00
Bon, j'ai réécrit mon code et j'ai plus de pb en passant en parametres... je sais pas ce qui n'allait pas par contre.
Merci Deepcore et Tentacle.
hihi
PS : tentacle > je ne redeclare pas la fonction print, je fais juste un "print $my_scalar" (tu peux passer un peu ce que tu veux comme argument a un print de toutes façons).