cómo acceder a las variables desde un archivo .pm a un archivo .pl

1.pm

package 1;
our $Var= "hello";

2.pl

use 1;
print "$Var\n";

estoy haciendo exactamente lo que me mencionan arriba en 2 archivos 1.pm y 2.pl. en 2.pl no puedo acceder a esa variable $Var.

Por favor, ¿puedes ayudarme? ¿Cómo debo declarar esa variable en el 1.pm archivo (la variable debe ser global)?

Gracias,

preguntado el 12 de febrero de 14 a las 07:02

No use números como nombres de paquetes, y print $mypackage::Var perldoc.perl.org/perlmod.html#Paquetes -

2 Respuestas

Resumen: los nombres de los paquetes no pueden comenzar con un número

Descripción detallada:

En primer lugar, utilice siempre

use strict;
use warnings;

en sus guiones. Habrías notado un mensaje de error:

Global symbol "$Var" requires explicit package name at 2.pl line 6.
Execution of 2.pl aborted due to compilation errors.

Puede acceder a él usando el nombre del paquete

$1::Var

pero conseguirás

Bareword found where operator expected at 2.pl line 6, near "$1::Var"
    (Missing operator before ::Var?)
Bareword "::Var" not allowed while "strict subs" in use at 2.pl line 6.
Execution of 2.pl aborted due to compilation errors.

Intente usar un nombre de módulo que no comience con un número. P.ej, Mod.pm

package Mod;

use strict;
use warnings;

our $Var= 'hello';
1;

y 2.pl

use warnings;
use strict;

use Mod;

print $Mod::Var . "\n";

1;

Desde perlmod

Solo los identificadores que comienzan con letras (o guiones bajos) se almacenan en la tabla de símbolos de un paquete.

Aunque no es obligatorio, es habitual (y muy recomendable) poner en mayúsculas los nombres de los paquetes. Ver por ejemplo Perl::Critic::Política::Convenciones de nomenclatura::Capitalización

Respondido 12 Feb 14, 08:02

@JackXu ¿Por qué? Correr perl 2.pl me da como esperaba hello - Mateo

Nombre "Test::Var" usado solo una vez: posible error tipográfico en test_package.pl línea 7. Uso de valor no inicializado $Test::Var en la impresión en test_package.pl línea 7. Simplemente reemplacé el Mod to Test - blio

Debe abrir una pregunta diferente y publicar ambos archivos. Es bastante difícil ver lo que hiciste en un comentario. - Mateo

@JackXu Test es el nombre de un módulo básico de Perl. Será mejor que elijas un nombre diferente. - dgw

Su problema no tiene nada que ver con el archivo en el que se declaró la variable, sino con el espacio de nombres en el que la puso usando el package palabra clave. Además, asegúrese de que sus espacios de nombres no comiencen con un número. Desde perlmod(1):

Solo los identificadores que comienzan con letras (o guiones bajos) se almacenan en la tabla de símbolos de un paquete.

Respondido 12 Feb 14, 08:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.