Perl et imbrication de foreach

picocpge -  
 picocpge -
Bonjour a tous,

voila, j'ai un petit probleme, en fait je dois imbriquer des foreach et ca ne marche pas.

lorsque je fais le programme ci dessous ca fonctionne :

@t2=(1,2,3);
@t3=(1,2);
foreach my $f (@t2){
foreach my $g (@t3){
print "$f,$g\n";
}
}

mais dans mon cas les tableaux ne sont pas definis en "dur" et ca ne fonctionne pas :

foreach my $f (@t1){

foreach my $g (@t2){
foreach my $h (@t3){
foreach my $k (@t4){
foreach my $l (@t5){
print SCRIPT "$f,$g,$h,$k,$l\n";
}
}
}
}
}

mes cinq tableaux sont definis precedemment dans des boucles et lorsque j'entre dans le premier foreach ca fonctionne mais il ne rentre pas dans le second foreach car il ne connait plus @t2 donc je me demande pkoi ???

Merci d'avance pour votre aide
Configuration: Windows XP
Internet Explorer 6.0

2 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie plutôt
    my (@t1,@t2,@t3,@t4,@t5);
    my ($f,$g,$h,$k,$l);
    
    foreach $f (@t1){ 
      foreach $g (@t2){ 
        foreach $h (@t3){ 
          foreach $k (@t4){ 
            foreach $l (@t5){ 
              print SCRIPT "$f,$g,$h,$k,$l\n"; 
            }
          }  
        } 
      } 
    } 
    0
    1. picocpge
       
      merci pour ta reponse mais en fait je suis oblige de definir mes tableaux avec des boucles car ils sont auto-generes par contre pour "my ($f,$g,$h,$k,$l);" pas de probleme.
      mais je suis assez d'accord avec toi car je pense aussi que mes foreach ne fonctionne pas a cause de la maniere dont je definis mes tableaux.
      Pourtant avant de rentrer dans mes foreach lorsque je mets print "@t1"; mon tableau s'affiche correctement et ca pareil pour tout mes tableaux... c bizarre pkoi ils ne fonctionnent plus une fois rentrer dans les foreach
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > picocpge
         
        As-tu utilisé use strict;use warnings; au début de ton script pour voir les messages d'erreur et d'avertissement?
        0
      2. picocpge > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        oui et il n'y a pas d'erreurs...
        c juste qu il ne reconnait pas mon @t2 pour entrer dans le second foreach et donc le programme sort des boucles sans rien faire
        0
      3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > picocpge
         
        as-tu la possibilité de me donner le code complet?
        0
  2. picocpge
     
    my @t1;
    my @t2;
    my @t3;
    my @t4;
    my @t5;
    my @t6;
    my @t7;
    my $a;

    for my $j(1..7){
    if($variable_name[$i] =~ "par$j"){

    $variable_name[$i] = $variable_value[$i];

    if ($variable_name[$i] !~ "NA"){
    if ($j==1){
    @t1 = split(',', $variable_name[$i]);
    $a=1;
    }
    else{
    if ($j==2){
    @t2 = split(',', $variable_name[$i]);
    $a = 2;
    }
    else{
    if ($j==3){
    @t3 = split(',', $variable_name[$i]);
    $a=3; }
    else{
    if ($j==4){
    @t4 = split(',', $variable_name[$i]);
    $a=4;

    }
    else{
    if ($j==5){
    @t5 = split(',', $variable_name[$i]);
    $a=5;
    }
    else{
    if ($j==6){
    @t6 = split(',', $variable_name[$i]);
    $a=6;
    }
    else{
    if ($j==7){
    @t7 = split(',', $variable_name[$i]);
    $a=7;
    }
    }
    }
    }
    }
    }
    }

    }}}

    #if($a==7){
    #foreach my $f (@t1){
    # foreach my $g (@t2){
    # foreach my $h (@t3){
    # foreach my $k (@t4){
    # foreach my $l (@t5){
    # foreach my $m (@t6){
    # foreach my $n (@t7){
    # print SCRIPT "AT+CGQREQ=$f,$g,$h,$k,$l,$m,$n\n";
    # }
    # }
    # }
    # }
    # }
    # }
    # }
    # }
    #else{
    # if($a==6){
    # foreach my $f (@t1){
    # foreach my $g (@t2){
    # foreach my $h (@t3){
    # foreach my $k (@t4){
    # foreach my $l (@t5){
    # foreach my $m (@t6){
    # print SCRIPT "AT+CGQREQ=$f,$g,$h,$k,$l,$m\n";
    # }
    # }
    # }
    # }
    # }
    # }
    # }
    # else{
    # if($a==5){

    my ($f,$g,$h,$k,$l);
    foreach $f (@t1){
    foreach $g (@t2){
    foreach $h (@t3){
    foreach $k (@t4){
    foreach $l (@t5){
    print "AT+CGQREQ=$f,$g,$h,$k,$l\n";
    }
    }
    }
    }
    }
    # }
    # }
    # }
    }
    }
    }
    0