web-dev-qa-db-fra.com

Le symbole global nécessite un nom de package explicite

Le symbole global nécessite un nom de package explicite? Pourquoi cela s'est-il produit et quels sont les différents cas pouvant causer cette erreur?

26
Tree

Jetez un coup d'œil à perldiag :

Le symbole global "% s" nécessite un nom de package explicite 

(F) Vous avez dit "use strict" ou "use strict vars", ce qui indique que toutes les variables doivent être soit de portée lexique (en utilisant "mon" ou "d'état"), déclarées au préalable en utilisant "notre", ou explicitement qualifiées pour dire dans quel paquet se trouve la variable globale (en utilisant "::").

23
musiKk

Cela peut également arriver lorsque la déclaration précédente n'est pas complète.

use strict;

sub test;

test()

# some comment
my $x;

Perl se plaint maintenant du message d'erreur suivant:

my "
Global symbol "$x" requires explicit package name

L'erreur ne figure pas dans la déclaration "my", mais au point-virgule manquant (;) à test().

25
koppor

Afin d'indiquer spécifiquement la cause dans votre code, vous devez poster votre code.

L'erreur est sortie et votre script est arrêté parce que vous avez use strict ou un dérivé de celui-ci . L'erreur se produit car votre programme appelle une variable hors de la portée.

  1. Vous avez peut-être utilisé my ou local dans une sous-procédure/fonction, mais essayez de l'utiliser dans une autre procédure ou en dehors de l'appel de fonction. 

     sub foo{
        my $bar=0; 
        our ($soap) = 1;
     }
     foo();
     print $bar        , "\n";  # does not work w/ strict -- bar is only in the scope of the function, not globally defined
     print $main::bar  , "\n";  # will run, but won't be populated
     print $soap       , "\n";  # does not work w/ strict -- the package isn't defined
     print $main::soap , "\n";  # will run and work as intended because of our
    
6
vol7ron

En fait, si vous utilisez use strict; et que vous oubliez quelque part ; à la fin d'une instruction, les instructions suivantes (leur syntaxe parfaite) peuvent générer Le symbole global requiert également le nom de package explicite .

0
xxks-kkk

utiliser des variables d'état sans use feature "state" ou use v5.10 à moins que le mot clé ne soit écrit sous la forme CORE :: state.

Extrait de http://perldoc.Perl.org/functions/state.html

0
Shiva