Bonjour la Communauté
Je viens à vous parce que j'ai un léger soucis dans un script Perl conçu autrefois sous Perl 5.6, qui fonctionne nickel sous Perl 5.8 mais qui plante sous la 5.14.
L'objectif : migration d'un vieux Linux à un Linux plus récent. Je suis donc en train de tester les comportements de mes programmes personnels et je bloque sur l'un d'eux.
J'ai un hash de liste tout bête. Chaque clé du hash est bien évidemment unique et contient une liste de 5 valeurs.
J'alimente ce hash à partir d'un fichier txt contenant par ligne "clé, valeur1, valeur2, ..., valeur 5.
Mon hash de liste ressemble au final à ceci :
Comme vous le voyez, rien de bien méchant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $hash{cle1}[0] = "valeur1"; $hash{cle1}[1] = "valeur2"; $hash{cle1}[2] = "valeur3"; $hash{cle1}[3] = "valeur4"; $hash{cle1}[4] = "valeur5"; ... ... ... $hash{cle1500}[0] = "valeur1"; $hash{cle1500}[1] = "valeur2"; $hash{cle1500}[2] = "valeur3"; $hash{cle1500}[3] = "valeur4"; $hash{cle1500}[4] = "valeur5";
J'ai 6 hash que j'envoie dans une fonction et, bien entendu, j'utilise les références pour bien retrouver mes petits.
Pour les hash de construction simple (hash{clé}->{valeur}), ça se passe super bien.
Pour CE hash de liste (hash{clé}->[valeur]), ça fait planter le script lors de l'appel de la fonction.
L'appel de la fonction se fait comme ceci :
Le début de ma fonction TraiteData :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TraiteData(\%{$hash_simple1{valeur1}}, \%{$hash_simple2{valeur1}}, \%{$hash_simple3{valeur1}}, \%{$hash_simple4{valeur1}}, \%{$hash_simple5{valeur1}}, \%{$hash_de_liste{valeur1}}) # <--- mon hash de liste
A l'appel de cette fonction, j'ai droit à un "NOT HASH REFERENCE".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sub TraiteData { my (@hash_simple1, @hash_simple2, @hash_simple3, @hash_simple4, @hash_simple5, @hash_de_liste); (@hash_simple1, @hash_simple2, @hash_simple3, @hash_simple4, @hash_simple5, @hash_de_liste) = @_; }
J'ai isolé les hash un par un et j'ai trouvé que c'était mon hash de liste qui ne passait plus sous Perl 5.14 alors qu'il marche sous 5.8.
Qu'y a-t-il de mauvais dans ma syntaxe lorsque j'envoie la référence de mon hash de liste à la fonction ?
Partager