2010-06-29 21 views
24

¿El símbolo global requiere el nombre explícito del paquete? ¿Por qué ha ocurrido esto y qué son varios los casos que pueden causar este error?El símbolo global requiere el nombre explícito del paquete

+1

Muestra el código de perl? Consulte http://stackoverflow.com/q/4257179/10468 o busque preguntas sobre módulos perl. Consulte también (fuera del sitio) http://www.sitepoint.com/forums/showthread.php?501379-Perl-require-and-variables – DarenW

Respuesta

22

Tenga una mirada en perldiag:

global del símbolo "% s" requiere explícita el nombre del paquete

(F) que ha dicho "use strict" o la "utilización VARs estrictas", que indica que todas las variables deben tener un alcance léxico (usando "mi" o "estado"), declaradas previamente usando "nuestro", o explícitamente calificadas para decir en qué paquete se encuentra la variable global (usando "::").

5

Para decir específicamente qué lo causó en su código, necesitaría publicar su código.

El error es emitida y la secuencia de comandos se detiene porque tienes use strict o un derivado de la misma. El error ocurre porque su programa llama a una variable fuera del alcance.

  1. Es posible que haya usado mi o local dentro de un procedimiento/función de sub, pero están tratando de usarlo dentro de otro procedimiento, o fuera de la llamada a la función.

    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 
    
-1

Está utilizando el use strict; afirmación es decir, sus códigos tienen que estar dentro de los reglamentos de escribir comandos en Perl.

+2

¿Qué regulación de la escritura de comandos Perl se está violando? – alex

23

También puede suceder cuando la declaración anterior no está completa.

use strict; 

sub test; 

test() 

# some comment 
my $x; 

Perl ahora se queja con el siguiente mensaje de error:

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

El error no está en la declaración de "mi", pero a la falta punto y coma (;) en test().

+2

¡Gracias! Me estaba arrancando el pelo. – Zack

0

De hecho, si se utiliza use strict; y en algún lugar se le pasa ; al final de un comunicado, a continuación, las siguientes afirmaciones (que tienen una sintaxis perfecta) podría incrementar símbolo global requiere nombre de paquete explícito también.

Cuestiones relacionadas