Perl “Pas un TABLEAU de référence” erreur
Je serai heureux si quelqu'un peut m'éclairer pour mon erreur:
my %mymap;
@mymap{"balloon"} = {1,2,3};
print $mymap{"balloon"}[0] . "\n";
Vous avez vraiment besoin de lire un peu de documentation sur Perl Perl et structures de données: lecture de
En outre il y a des livres comme des
perldoc perlintro
, perldoc perldata
et probablement perldoc perlreftut
et perldoc perldsc
.En outre il y a des livres comme des
Modern Perl
disponible. S'il vous plaît apprendre les bases de la langue et de revenir vers nous quand vous avez des punaises et nous nous ferons un plaisir de vous aider!OriginalL'auteur eve | 2011-08-17
Vous devez vous connecter pour publier un commentaire.
Si vous aviez utilisé le "use strict; utilisez les mises en garde," sur le haut de votre code, vous avez probablement déjà eu de meilleurs messages d'erreur.
Ce que vous êtes en train de faire est de créer un hachage appelé mymap. Un hachage stocke les données comme key => valeur des paires.
Vous êtes alors en attribuant un tableau de référence à la clé ballon. Votre petit code ciselée avait deux questions: 1. vous n'avez pas abordé la mymap de hachage, 2. si vous souhaitez passer d'une liste, vous devez utiliser des crochets:
ce imprime '1'.
Vous pouvez aussi utiliser un tableau:
OriginalL'auteur MichielB
$mymap{'balloon'}
est un de hachage pas un tableau. L'expression{1,2,3}
crée une table de hachage:Que vous avez attribué à un tranche de
%mymap
correspondant à la liste de touches:('balloon')
. Depuis la clé liste a 1 élément et la valeur liste était un élément, vous avez fait la même chose queSi vous aviez utilisé
strict
etwarnings
il serait clued vous à votre erreur. J'ai eu:Scalar value @mymap{"balloon"} better written as $mymap{"balloon"} at - line 3.
Odd number of elements in anonymous hash at - line 3.
OriginalL'auteur Axeman
Bien, tout d'abord, toujours
use strict; use warnings;
. Si vous aviez, il pourrait vous ai dit à propos de ce qui est faux ici.Voici ce que vous faites dans votre programme:
Pour qu'il fasse ce que vous attendez, n':
OriginalL'auteur TLP
Bon, quelques petites choses...
%mymap
est une table de hachage.$mymap{"balloon"}
est un scalaire, c'est à dire, la valeur de la table de hachage%mymap
correspondant à la clé"balloon"
.@mymap{"balloon"}
est une tentative de ce qu'on appelle une table de hachage tranche--en fait, vous pouvez les utiliser pour attribuer un tas de valeurs à un trousseau de clefs à la fois:@hash{@keys}=@values
.Donc, si vous souhaitez affecter un tableau de référence pour
$mymap{"balloon"}
, vous auriez besoin de quelque chose comme:$mymap{"balloon"}=[1,2,3]
.Pour accéder aux éléments, vous pouvez utiliser
->
comme suit:Ou, vous pouvez omettre les flèches:
$mymap{"balloon"}[0]
, etc.->
que par la "Flèche de la Règle" dans leperldoc perlreftut
- à-dire$mymap{ballon}[0]
Ouais, personnellement, je préfère utiliser les flèches, depuis (OMI), ils permettent une plus facile visuelle de la délimitation de l'couches dans les données. Depuis TIMTOWTDI, cependant, j'ai fait un edit.
Je comprends et même à soutenir ce point, cependant, une fois que vous avez plusieurs indices alignés, la plupart des lecteurs devrait voir qu'il est imbriqué dans la structure de données et être ok avec elle. BTW je fais d'habitude toujours utiliser une flèche lorsque les données contenues coderef que je suis en invoquant.
OriginalL'auteur