2010-12-28 8 views
20

¿Cómo compartimos o exportamos una variable global entre dos scripts de Perl diferentes?¿Cómo compartir/exportar una variable global entre dos scripts de Perl diferentes?

Aquí está la situación:

first.pl

#!/usr/bin/perl 
use strict; 
our (@a, @b); 
......... 

second.pl

#!/usr/bin/perl 
use strict; 
require first.pl; 

quiero usar variable global (@a, @b) declaró en first.pl

Además, supongamos que hay una variable en el segundo archivo perl igual que el primer archivo perl. Pero quiero usar la variable del primer archivo. ¿Cómo lograr esto?

Respuesta

15

Compartirán variables globales, sí. ¿Estás viendo algún problema con eso?

Ejemplo:

first.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

our (@a, @b); 

@a = 1..3; 
@b = "a".."c"; 

second.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

require "first.pl"; 

our (@a,@b); 
print @a; 
print @b; 

Dar:

$ perl second.pl 
123abc 
+1

Gracias .... me perdí para declarar la misma variable en el segundo.pl. Inicialmente, cuando no fue declarado, dice, la variable "@a" no se importa en ..... Está funcionando ahora ... – Cthar

2

Cant usa el paquete y exportar la variable?

+1

Gracias .... Después de este problema ... estoy explorando el uso del paquete. Gracias de cualquier manera. – Cthar

29

En general, cuando trabaja con varios archivos e importa variables o subrutinas entre ellos, encontrará que requerir archivos se complica un poco a medida que crece el proyecto. Esto se debe a que todo comparte un espacio de nombres común, pero con algunas variables declaradas en algunos archivos pero no en otros.

La manera habitual en que se resuelve en Perl es crear módulos y luego importar desde esos módulos. En este caso:

#!/usr/bin/perl 

package My::Module; # saved as My/Module.pm 
use strict; 
use warnings; 

use Exporter; 
our @ISA = 'Exporter'; 
our @EXPORT = qw(@a @b); 

our (@a, @b); 

@a = 1..3; 
@b = "a".."c"; 

y después de usar el módulo:

#!/usr/bin/perl 

use strict; 
use warnings; 

use My::Module; # imports/declares the two variables 

print @a; 
print @b; 

Eso use línea en realidad significa:

BEGIN { 
    require "My/Module.pm"; 
    My::Module->import(); 
} 

El método import proviene de Exporter. Cuando se invoca, exporta las variables en la matriz @EXPORT en el código de llamada.

En cuanto a la documentación de Exporter y perlmod debería darle un punto de partida.

Cuestiones relacionadas