如何在两个不同的perl脚本之间共享/导出全局变量?

时间:2010-12-28 05:42:48

标签: perl variables export global

我们如何在两个不同的perl脚本之间共享或导出全局变量。

情况如下:

first.pl

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

second.pl

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

我想使用 first.pl

中声明的全局变量(@a@b

另外,假设第二个perl文件中的变量与第一个perl文件相同。但我想使用第一个文件的变量。怎么做到这一点?

3 个答案:

答案 0 :(得分:30)

通常,当您处理多个文件,并在它们之间导入变量或子例程时,您会发现随着项目的增长,需要文件会变得有点复杂。这是因为所有内容共享一个共同的命名空间,但在某些文件中声明了一些变量,而在其他文件中却没有。

在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数组中的变量导出到调用代码中。

查看Exporterperlmod的文档应该为您提供一个起点。

答案 1 :(得分:17)

他们将分享全局变量,是的。你看到了一些问题吗?

示例:

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

答案 2 :(得分:2)

你不能使用包并导出变量吗?