Posez votre question Signaler

If en perl

Kharec 4258Messages postés 20 avril 2008Date d'inscription 8 mai 2011Dernière intervention - Dernière réponse le 28 déc. 2009 à 09:42
Bonjour la communauté,
Je vous explique mon souci, j'ai fait un script inutile pour retenir les structures sub, if, et for. Mais là... If passe directement à la réponse "Votre variable n'est pas gore"... Pourquoi?
#! /usr/bin/perl
sub func() {
if ($var eq "gore") {
print "Votre variable est bien gore\n" ;
}
else {
print "Votre variable n'est pas gore \n" ;
}
}
print "Donnez la variable: " ;
for (chomp(my $var=<STDIN>)) {
func ;
}
Merci à ceux qui pourront m'aider =)
Lire la suite 

If en perl »

2 réponses
Réponse
+0
moins plus
Salut,

1. pourquoi un for sur une seule variable, en général de cette manière on l'utilise comme un foreach pour un tableau?

2. Tu as deux variables $var qui ne sont pas les même. Elles ne se voient jamais entre eux à cause de leur portée.

3. Un use strict;use warnings; t'aurais prévenu
lami20j@debian:~$ cat if.pl
#! /usr/bin/perl
use strict;use warnings;
sub func() {
if ($var eq "gore") {
print "Votre variable est bien gore\n" ;
}
else {
print "Votre variable n'est pas gore \n" ;
}
}
print "Donnez la variable: " ;
for (chomp(my $var=<STDIN>)) {
func ;
} 
lami20j@debian:~$ perl -cx if.pl
Global symbol "$var" requires explicit package name at if.pl line 4.
if.pl had compilation errors.


Cas 1 - j'utilise our $var
Le code s'exécute correctement puisque la variable $var est globale.

lami20j@debian:~$ cat if.pl
#! /usr/bin/perl
use strict;use warnings;
our $var;
sub func() {
  if ($var eq "gore") {
    print "Votre variable est bien gore\n" ;
  }else {
    print "Votre variable n'est pas gore \n" ;
  }
}
print "Donnez la variable: " ;
for (chomp( $var=<STDIN>)) {
  func ;
} 
lami20j@debian:~$ perl -cx if.pl 
if.pl syntax OK
lami20j@debian:~$ perl if.pl
Donnez la variable: gore
Votre variable est bien gore
lami20j@debian:~$ perl if.pl
Donnez la variable: blabla
Votre variable n'est pas gore 


Cas 2 - j'utilise le tableau @_
lami20j@debian:~$ cat if1.pl
#! /usr/bin/perl
use strict;use warnings;

sub func {
  my $var = shift;
  if ($var eq "gore") {
    print "Votre variable est bien gore\n" ;
  }
  else {
    print "Votre variable n'est pas gore \n" ;
  }
}
print "Donnez la variable: " ;
chomp(my $var=<STDIN>);
func($var); 
lami20j@debian:~$ perl -cx if1.pl 
if1.pl syntax OK
lami20j@debian:~$ perl if1.pl 
Donnez la variable: gore
Votre variable est bien gore
lami20j@debian:~$ perl if1.pl 
Donnez la variable: blabla
Votre variable n'est pas gore 
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Voici ce qui ce passe avec la portée des variables.

lami20j@debian:~$ cat var.pl 
#!/usr/bin/perl
use strict;use warnings;
our $var="gore";
print "A l'exterieur \$var vaut : $var\n";

{
  my $var = "autre chose";
  print "Dans le bloc \$var vaut : $var\n";
}
print "A l'exterieur \$var vaut : $var\n";
__END__

lami20j@debian:~$ perl var.pl 
A l'exterieur $var vaut : gore
Dans le bloc $var vaut : autre chose
A l'exterieur $var vaut : gore
Ajouter un commentaire
Ce document intitulé « If en perl » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?