从不同的Perl脚本访问Perl子例程

4

我有一个 Perl 脚本,其中我们编写了几个子程序。例如:

# Try_1.pl

main();

sub main{
---
---
 check();
}

check {
--
--}

现在,我写了另一个脚本Try_2.pl,其中我想调用Perl脚本Try_1.pl的检查子例程。

4个回答

7

听起来你想创建一个模块。尝试_1.pm (注意扩展名) 应该具有以下形式:

package Try_1;
use base 'Exporter';
our @EXPORT = qw(check);

sub check {
}

1;

然后 Try_2.pl 需要获取那段代码:

use Try_1 qw(check);

你是在寻找这个吗?

4
此外,包含此软件包的文件需要命名为 Try_1.pm 并放置在您的 @INC 路径中。 - friedo
2
由于您使用了@EXPORT,因此在Try_2.pl中不需要显式导入函数check,只需简单地使用use Try_1即可。您可以使用@EXPORT_OK来要求显式导入。 - Joel Berger
@Joel 当然,你不一定需要指定函数,但最好只导入你需要的函数。如果你明确指定特定的函数,它就不会导入其他任何东西。这还可以告诉你在代码顶部有多少全局命名空间被污染了(因为你明确调用它们,所以可以说根本没有被“污染”)。 - Tamzin Blake
是否可以将变量设置为全局变量,跨越主脚本和您创建的模块?如果可以,如何实现呢?我遇到了一些问题,谢谢。 - yonetpkbji
@perl-user 这是一个不同的问题 - 你应该先在SE上搜索,如果找不到答案,再将其作为一个问题提出来。 - Tamzin Blake

5
如果您没有使用模块(扩展名为.pm),而是使用库(扩展名为.pl):
require 'Try_1.pl';
check();

请确保Try_1.plTry_2.pl两个文件在同一个目录中。


1
你可能需要这个。

test1.pl:

use Routines;
{    
    my $hello = "hello123";
    hello( $hello );    
    # ...
}

test2.pl:

package Routines;
sub hello 
{
    my $hello = shift;
    print "$hello\n";
}
1;

0

"run" 的答案经过测试可以工作,但需要像这样调用 "Try_1::check()"。否则会显示错误 "Undefined subroutine &main::check()"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接