2010-12-28 17 views
20

Come condividere o esportare una variabile globale tra due diversi script perl.Come condividere/esportare una variabile globale tra due diversi script perl?

Qui è la situazione:

first.pl

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

second.pl

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

voglio usare variabile globale (@a, @b) ha dichiarato in first.pl

Supponiamo inoltre che ci sia una variabile nel secondo file perl come nel primo file perl. Ma voglio usare la variabile del primo file. Come ottenere questo?

risposta

15

Condivideranno variabili globali, sì. Stai vedendo qualche problema con quello?

Esempio:

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; 

Dare:

$ perl second.pl 
123abc 
+1

Grazie .... mi sono perso per dichiarare la stessa variabile nel secondo.pl. Inizialmente, quando non è stato dichiarato, dice, la variabile "@a" non viene importata a ..... Sta funzionando ora ... – Cthar

2

Cant si utilizza il pacchetto ed esportare la variabile?

+1

Grazie .... Dopo questo problema ... sto esplorando l'uso del pacchetto. Grazie comunque. – Cthar

29

In generale, quando si lavora con più file e si importano variabili o subroutine tra di essi, si scoprirà che la richiesta di file finisce per complicarsi man mano che il progetto cresce. Ciò è dovuto a tutto ciò che condivide uno spazio dei nomi comune, ma con alcune variabili dichiarate in alcuni file ma non in altri.

Il solito modo in cui questo viene risolto in Perl è creare moduli e quindi importarli da tali moduli. In questo 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"; 

e quindi di utilizzare il modulo:

#!/usr/bin/perl 

use strict; 
use warnings; 

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

print @a; 
print @b; 

Tale use linea significa in realtà:

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

Procedimento import proviene Exporter. Quando viene chiamato, esporta le variabili nell'array @EXPORT nel codice chiamante.

Guardando la documentazione per Exporter e perlmod dovrebbe darvi un punto di partenza.

Problemi correlati