Comment partager/exporter une variable globale entre deux scripts perl différents?

comment partager ou exporter une variable globale entre deux scripts perl différents.

Voici la situation:

first.pl

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

second.pl

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

je veux utiliser la variable globale (@a, @b) a déclaré dans first.pl

aussi,supposons qu'il y ait une variable dans le deuxième fichier perl identique au premier fichier perl. Mais je veux utiliser la variable du premier fichier. Comment faire pour obtenir cette?

23
demandé sur Cthar 2010-12-28 08:42:48

3 réponses

en général, lorsque vous travaillez avec plusieurs fichiers, et que vous importez des variables ou des sous-Programmes entre eux, vous constaterez que le fait d'exiger des fichiers finit par devenir un peu compliqué au fur et à mesure que votre projet se développe. Cela est dû à tout ce qui partage un espace de noms commun, mais avec certaines variables déclarées dans certains fichiers mais pas d'autres.

la façon habituelle de résoudre ce problème dans Perl est de créer des modules, puis d'importer à partir de ces modules. Dans ce cas:

#!/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";

et ensuite à utiliser le module:

#!/usr/bin/perl

use strict;
use warnings;

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

print @a;
print @b;

use ligne signifie en fait:

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

import la méthode vient de Exporter. Quand il est appelé, il exporte les variables dans @EXPORT tableau dans le code appelant.

en regardant la documentation pour Exportateur et perlmod devrait vous donner un point de départ.

30
répondu Eric Strom 2010-12-28 17:58:04

ils partageront les variables globales, Oui. Voyez-vous un problème avec ça?

Exemple:

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;

donner:

$ perl second.pl
123abc
16
répondu ysth 2010-12-28 06:02:24

ne pouvez-vous pas utiliser package et exporter la variable?

2
répondu SAN 2010-12-28 05:57:47