Je reçois l'avertissement avec l'utilisation de la syntaxe suivante - mais je ne reçois pas un avertissement similaire à l'utilisation de la syntaxe similaire. p>
3 Réponses :
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], );
Juste une grossière (clarification): les valeurs de hachage sont i> scalaire - et seront scalaires dans chaque constructeur de hash possible. Si vous voulez une clé pour faire référence à une structure i>, 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, ... code>
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);
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 Vous pouvez vous reporter aux éléments de matrice comme p>
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.