Подтвердить что ты не робот

Как разделить/экспортировать глобальную переменную между двумя разными скриптами perl?

Как мы делимся или экспортируем глобальную переменную между двумя разными perl-скриптами.

Вот ситуация:

first.pl

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

second.pl

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

Я хочу использовать глобальную переменную (@a, @b), объявленную в first.pl

Кроме того, предположим, что переменная во втором файле perl такая же, как первый файл perl. Но я хочу использовать первую переменную файла. Как достичь этого?

4b9b3361

Ответ 1

В общем, когда вы работаете с несколькими файлами и импортируете переменные или подпрограммы между ними, вы обнаружите, что требуемые файлы становятся немного сложными по мере роста вашего проекта. Это связано с тем, что все разделяет общее пространство имен, но с некоторыми переменными, объявленными в некоторых файлах, но не с другими.

Обычным способом решения этой проблемы в Perl является создание модулей, а затем импорт из этих модулей. В этом случае:

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

а затем использовать модуль:

#!/usr/bin/perl

use strict;
use warnings;

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

print @a;
print @b;

Эта строка use на самом деле означает:

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

Метод import исходит от Exporter. Когда он вызывается, он будет экспортировать переменные в массиве @EXPORT в вызывающий код.

Глядя на документацию для Exporter и perlmod должен дать вам отправную точку.

Ответ 2

Они будут делиться глобальными переменными, да. Вы видите некоторые проблемы с этим?

Пример:

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;

Дарение:

$ perl second.pl
123abc

Ответ 3

Нельзя использовать пакет и экспортировать переменную?