1
votes

Syntaxe Perl (en remplaçant 'defined (@array')

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.


2 commentaires

Essayez: if (existe $ refPRE {$ c [0]} et (ref $ refPRE {$ c [0]} eq "ARRAY") et @ {$ refPRE {$ c [0]}})


Qu'est-ce que vous essayez de vérifier?


3 Réponses :


2
votes

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) ...


1 commentaires

Canard en caoutchouc! :RÉ



2
votes

Impossible d'utiliser une valeur non définie comme référence ARRAY.

Cela signifie que $ refPRE {$ c [0]} renvoie undef , et que vous ne pouvez pas déréférencer undef 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

0 commentaires

2
votes

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 .


0 commentaires