Bonjour,

J'ai un array de array :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$VAR1 = [
          [
            '1',
            undef
          ],
          [
            undef,
            '5'
          ],
          [
            '3',
            '6'
          ],
          [
            '4',
            undef
          ],
          [
            '5',
            '45'
          ]
        ];
Je voudrais connaître le nombre que j'ai d'éléments définis d'indexe 0 et d'indexe 1.

Voici la fonction parcourant cet array d'array :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# fonction pour remplir un tableau d'éléments
sub remplir{
    my $table = $_[0];
    my %recept_table;
    foreach my $ref (@{$table}){
        for (my $col=0; $col<@{$ref}; $col++){
            if($col){
            $recept_table{$col}++; }
        }
    }
    my $ref = \%recept_table;
    return($ref)
}
...
my $ref_hash_recept;
$ref_hash_recept = remplir($table);
 
# pour tester :
while ((my $val, my $cle)=each %{$ref_hash_recept} ){
    print "nombre d'éléments définis : " .$cle. " \tindexe array ".$val."\n";
}
%recept_table contient donc comme clés les indexes des listes et en valeur le nombre d'occurences de ceux-ci

Si mon test est if($col), j'obtiens en réponse
nombre d'éléments définis : 5 indexe array 1

Si mon test est if($col=~ /\d+/), j'obtiens en réponse
nombre d'éléments définis : 5 indexe array 1
nombre d'éléments définis : 5 indexe array 0
Pourriez-vous m'expliquer pourquoi les valeurs non définies passent également ce test.


Ma question est stupide, je viens de me rendre compte que $col est mon indice et non ma valeur ^^ et dire que ça fait au moins trente minutes que je me casse la tête pour rien


merci,