[Perl] variables locales et cie...

variables locales et cie... [Perl] - Programmation

Marsh Posté le 18-03-2002 à 16:06:17    

hi.
 
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 :D

Reply

Marsh Posté le 18-03-2002 à 16:06:17   

Reply

Marsh 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..."
Reply

Marsh 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 :p

Reply

Marsh 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..."
Reply

Marsh 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 :p  




 
il doit te donner un numero de ligne a ce moment-là... regarde ou ça se trouve :)

Reply

Marsh 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 :p

Reply

Marsh 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..."
Reply

Marsh 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 :D

Reply

Marsh Posté le 18-03-2002 à 16:37:04    

Deepcore > mon code est top secret :p
 
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 :p

Reply

Marsh 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. :D


---------------
"Si ça peut déconner, ça va déconner..."
Reply

Marsh Posté le 18-03-2002 à 16:53:43   

Reply

Marsh 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. :D  




 
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

Reply

Marsh 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 :D

Reply

Marsh 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 -_-

Reply

Marsh 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 :)

Reply

Marsh 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..."
Reply

Marsh 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) = @_;

Reply

Marsh 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. :jap:
 
hihi :p
 
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).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed