8
votes

AVERTISSEMENT - "Nombre impair d'éléments dans la mission de hash" dans Perl

Je reçois l'avertissement avec l'utilisation de la syntaxe suivante - xxx

mais je ne reçois pas un avertissement similaire à l'utilisation de la syntaxe similaire. xxx


2 commentaires

Voir aussi Stackoverflow.com/Questtions/2914183/...


La liste de Perl aplatissant des frappes à nouveau. La liste aplatissement a des effets bénéfiques, mais cela se confond aussi souvent pour ceux non utilisés. Un exemple d'avantage est qu'il n'y a pas besoin d'une fonction de demande spéciale ( en.wikipedia.org/wiki / Appliquer ), vous pouvez créer une structure de données d'arguments de fonction et simplement l'utiliser.


3 Réponses :


13
votes

Vous devez modifier vos parenthèses sur des crochets:

my %data_variables = (
    "Sno."        => [5,0],
    "ID"          => [20,1], 
    "DBA"         => [50,2], 
    "Address"     => [80,3], 
    "Certificate" => [170,4],
);


1 commentaires

Juste une grossière (clarification): les valeurs de hachage sont scalaire - et seront scalaires dans chaque constructeur de hash possible. Si vous voulez une clé pour faire référence à une structure , vous devez spécifier cette structure. Si vous passez une liste à la place d'un arrayref, Perl divisera heureusement que la liste en touches et valeurs alternées. Le problème est qu'il construit un hachage que vous ne voulez pas. "sno." => 5, '0' => 'id', '20' => 1, ...



11
votes

La différence est que "..." est une chaîne (scalaire unique) et (5, 0) code> est une liste de deux scalaires. Donc, dans le premier extrait, vous faites cela:

my %data_variables = ("Sno.", 5, 0, "ID", 20, 1, "Address", 80, 3, "Certificate", 170, 4);


0 commentaires

3
votes

Vous essayez de mettre une liste en tant qu'éléments de hasch, et il les considère comme plus de paires de clé / valeur. Ce que vous voulez vraiment faire, c'est de mettre des réfs pour la matrice, comme xxx

Vous pouvez vous reporter aux éléments de matrice comme xxx


0 commentaires