Permettez-moi de commencer par dire que je n'ai pas programmé en Perl depuis LONGTEMPS.
J'essaie actuellement de faire fonctionner un code plus ancien qui repose sur défini
avec un tableau. p >
Code (abrégé):
# defined outside the file-reading block my %refPRE; # line from a file @c = split(); if (defined @{$refPRE{$c[0]}}) { # do stuff }
Maintenant, cela ne fonctionnera pas comme ça à cause de l'erreur suivante:
Can ' t use 'defined (@array)' (Peut-être que vous devriez simplement omettre le defined ()?)
Très bien, mais si j'ai supprimé le defined
alors j'obtiens l'erreur suivante:
Impossible d'utiliser une valeur non définie comme référence ARRAY
.
Je peux voir ce qu'il essaie de faire (si $ c [0]
est dans le $ refPRE
alors faites ceci, sinon faites autre chose) mais je ne suis pas assez familier avec Perl pour comprendre quelle est la bonne façon de faire fonctionner cela. En espérant que ce soit trivial pour quelqu'un.
3 Réponses :
Apparemment, publier ici est tout le catalyseur dont j'avais besoin ...
Passer de if (defined @ {$ refPRE {$ c [0]}})
à if ($ refPRE {$ c [0]})
était suffisant pour travailler! J'espère que cela aidera quelqu'un d'autre qui recherche ce problème (spécifique) ...
Canard en caoutchouc! :RÉ
Impossible d'utiliser une valeur non définie comme référence ARRAY.
Cela signifie que
$ refPRE {$ c [0]}
renvoieundef
, et que vous ne pouvez pas déréférencerundef
en tant que tableau.if ( $refPRE{$c[0]} ) { my $foo = @{ $refPRE{$c[0]} }; # do stuff }Vous n'avez pas du tout besoin de déréférencer cela. S'il renvoie
undef
, c'est false . S'il renvoie autre chose, ce sera (probablement) vrai .@{ undef } # will error
En examinant votre deuxième erreur, $ refPRE {$ c [0]}
peut être indéfini, donc @ {...}
échoue. Vous pouvez résoudre ce problème en utilisant undef ou opperator //
comme ceci.
if (@{ $refPRE{$c[0]} // [] }) { ... }
Ceci vérifie si $ refPRE {$ c [0]}
est défini et sinon renvoie un tableau anonyme vide. Un tableau vide est faux dans une instruction if
.
Essayez:
if (existe $ refPRE {$ c [0]} et (ref $ refPRE {$ c [0]} eq "ARRAY") et @ {$ refPRE {$ c [0]}}) code>
Qu'est-ce que vous essayez de vérifier?