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 :
Code :
- $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";
|
Comme vous le voyez, rien de bien méchant.
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 :
Code :
- TraiteData(\%{$hash_simple1{valeur1}}, \%{$hash_simple2{valeur1}},
- \%{$hash_simple3{valeur1}}, \%{$hash_simple4{valeur1}},
- \%{$hash_simple5{valeur1}},
- \%{$hash_de_liste{valeur1}}) # <--- mon hash de liste
|
Le début de ma fonction TraiteData :
Code :
- 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) = @_;
- }
|
A l'appel de cette fonction, j'ai droit à un "NOT HASH REFERENCE".
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 ?
---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL