web-dev-qa-db-fra.com

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 souhaite utiliser la variable globale (@a, @b) déclaré dans first.pl

Supposons également qu'il existe une variable dans le deuxième fichier Perl identique au premier fichier Perl. Mais je veux utiliser la variable du premier fichier. Comment y parvenir?

25
Cthar

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 la nécessité de fichiers finit par devenir un peu compliquée à mesure que votre projet se développe. Cela est dû au fait que tout partage un espace de noms commun, mais avec certaines variables déclarées dans certains fichiers mais pas dans d'autres.

La manière habituelle de résoudre ce problème en Perl consiste à créer des modules, puis à 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";

puis d'utiliser le module:

#!/usr/bin/Perl

use strict;
use warnings;

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

print @a;
print @b;

Cette ligne use signifie en fait:

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

La méthode import provient de Exporter. Quand il est appelé, il exportera les variables dans le @EXPORT tableau dans le code appelant.

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

31
Eric Strom

Ils partageront des variables globales, oui. Voyez-vous un problème avec cela?

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;

Donnant:

$ Perl second.pl
123abc
18
ysth

Pouvez-vous utiliser le package et exporter la variable?

2
SAN