it-swarm.dev

Il simbolo globale richiede un nome esplicito del pacchetto

Il simbolo globale richiede un nome esplicito del pacchetto? Perché si è verificato questo e quali sono i vari casi che possono causare questo errore?

26
Tree

Dai un'occhiata a perldiag :

Il simbolo globale "% s" richiede il nome esplicito del pacchetto 

(F) Hai detto "use strict" o "use strict vars", che indica che tutte le variabili devono essere o lessicamente scopeate (usando "my" o "state"), dichiarate in precedenza usando "our" o esplicitamente qualificato per dire quale pacchetto è la variabile globale (usando "::").

23
musiKk

Può anche accadere quando l'affermazione precedente non è completa.

use strict;

sub test;

test()

# some comment
my $x;

Perl ora si lamenta con il seguente messaggio di errore:

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

L'errore non è nella dichiarazione di "my", ma nel punto e virgola mancante (;) in test().

25
koppor

Per poter dire in modo specifico cosa l'ha causato nel tuo codice, dovrai pubblicare il tuo codice.

L'errore èoutputtede il tuo script viene fermato perché hai use strict o un suo derivato . L'erroresi verificaperché il tuo programma chiama una variabile fuori dal campo di applicazione.

  1. È possibile che tu abbia utilizzato my o local all'interno di una sottoprocedura/funzione, ma stai tentando di usarlo all'interno di un'altra procedura o al di fuori della chiamata di funzione. 

     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

Infatti, se usi use strict; e in qualche posto ti manchi ; alla fine di un'istruzione, allora le seguenti affermazioni (hanno una sintassi perfetta) potrebbero sollevare Il simbolo globale richiede esplicitamente il nome del pacchetto pure.

0
xxks-kkk

usando variabili di stato senza use feature "state" o use v5.10 a meno che la parola chiave non sia scritta come CORE :: state.

Tratto da http://perldoc.Perl.org/functions/state.html

0
Shiva