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

发布于 2024-10-09 01:46:26 字数 426 浏览 3 评论 0原文

我们如何在两个不同的 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 文件相同的变量。但我想使用第一个文件的变量。如何实现这一目标?

How do we share or export a global variable between two different perl scripts.

Here is the situation:

first.pl

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

second.pl

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

I want to use global variable (@a, @b) declared in first.pl

Also,suppose there's a variable in second perl file same as first perl file. But I want to use first file's variable. How to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁把谁当真 2024-10-16 01:46:26

一般来说,当您处理多个文件并在它们之间导入变量或子例程时,您会发现随着项目的增长,所需的文件最终会变得有点复杂。这是因为所有内容都共享一个公共名称空间,但某些变量在某些文件中声明,而在其他文件中则没有声明。

在 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 应该给你一个起点。

In general, when you are working with multiple files, and importing variables or subroutines between them, you will find that requiring files ends up getting a bit complicated as your project grows. This is due to everything sharing a common namespace, but with some variables declared in some files but not others.

The usual way this is resolved in Perl is to create modules, and then import from those modules. In this case:

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

and then to use the module:

#!/usr/bin/perl

use strict;
use warnings;

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

print @a;
print @b;

That use line actually means:

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

The import method comes from Exporter. When it is called, it will export the variables in the @EXPORT array into the calling code.

Looking at the documentation for Exporter and perlmod should give you a starting point.

戴着白色围巾的女孩 2024-10-16 01:46:26

是的,他们将共享全局变量。你觉得这有什么问题吗?

示例:

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

They will share global variables, yes. Are you seeing some problem with that?

Example:

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;

Giving:

$ perl second.pl
123abc
您的好友蓝忘机已上羡 2024-10-16 01:46:26

不能使用 package 并导出变量吗?

Cant you use package and export the variable?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文