Référence trouvé où même la taille de la liste prévue
Je suis en train d'écrire ce code en perl, où j'ai créer une clé unique, puis de lui affecter une valeur.
sub populate {
my $file = shift;
my %HoH = shift;
open(INFILE,$file);
.
.
.
$final_name = $prepend.$five;
$HoH{$final_name} = $seven;
}
Maintenant, je suis de passage dans les deux paramètres à un sous-programme dont l'id comme
&populate(\%abc,$file_1);
&populate(\%xyz,$file_2);
Pourquoi il me donne une erreur comme ceci:
Reference found where even-sized list expected
- Quelle que soit la documentation que vous êtes en train de lire qui vous dit d'utiliser les deux arguments de la forme "ouverte" est obsolète. Utilisez les trois-argument forme:
open my $INFILE, '<', $file
. (Et vérifier les erreurs.) - mais $fichier contient l'adresse de l'emplacement du fichier.
- Je ne suis pas sûr de ce que vous voulez dire par là.
$file
doit contenir le nom du fichier. Les appelsopen(INFILE, $file)
etopen my $INFILE, '<', $file
sont à peu près équivalent, mais celle-ci est mieux.perldoc -f open
pour plus d'informations. (Et il vous manque un '$' dans votre code source;my file = shift;
devrait êtremy $file = shift;
.) - oh que c'était une faute de frappe.Dans le code que j'avais tapé que. De sorte qu'il imprime les choses pour le 1er fichier, mais pas pour le 2ème fichier.
- Il n'y a pas de
print
déclaration dans votre code. Comment peut-il imprimer quoi que ce soit? - C'est pourquoi vous devez copier-coller votre code, de ne pas retaper.
- je vais garder cela à l'esprit.Et concernant l'impression , ce que je voulais dire, c'est stocker les valeurs dans la table de hachage HoH.
Vous devez vous connecter pour publier un commentaire.
Parce que votre valeur de hachage est attribué à une référence, et non pas une table de hachage (même de la taille de la liste). Ce que vous devez faire:
ETA: Vous devez appeler des sous-programmes sans
&
, par exemplepopulate(...)
, sauf si vous souhaitez remplacer le prototype de la sous. Si vous ne savez pas ce qu'est un prototype, il suffit de ne pas utiliser&
.ETA2: Vous devriez vraiment utiliser un descripteur de fichier lexical et trois-argument ouvrir. Considérons ce scénario:
\%abc
pour le fichier, et$file_1
pour le hachage.populate(\%abc, $file_1)
, la premièreshift
est le hachage, le deuxième le fichier.