If en perl

Kharec Messages postés 4146 Date d'inscription   Statut Contributeur Dernière intervention   -  
 lami20j -
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. lami20j
     
    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
  2. lami20j
     
    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