cómo acceder a las variables desde un archivo .pm a un archivo .pl
Frecuentes
Visto 1,783 equipos
0
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,
2 Respuestas
3
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
1
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 perl or haz tu propia pregunta.
No use números como nombres de paquetes, y
print $mypackage::Var
perldoc.perl.org/perlmod.html#Paquetes - mpapec