If en perl

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 =)

2 réponses

  1. 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
    1. 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