If en perl

Fermé
Kharec Messages postés 4143 Date d'inscription dimanche 20 avril 2008 Statut Contributeur Dernière intervention 8 mai 2011 - 27 déc. 2009 à 22:17
 lami20j - 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 =)
A voir également:

2 réponses

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 
0
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
0