如何从一个perl模块调用子程序到另一个perl模块?

时间:2015-06-23 04:22:32

标签: perl perl-module

我有一个perl文件,它使用两个perl模块A.pm,B.pm。

但是在B.pm我需要调用A.pm的子程序。即使我在A.pm中使用并尝试使用它,我仍然会得到未定义的错误。

对此的任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:2)

有两个要素 - 首先是找到模块。 Perl有一个'库'你可以找到的路径:

print join ( "\n", @INC ); 

这是它看起来的地方。它还会检查当前的工作目录,但是使用运行时相对路径会有点困难 - 你需要使用FindBin模块。

第二个元素是导入和导出子例程。默认情况下,如果您use A; 赢得将所有内容导入您的本地名称空间,因为......您不想意外覆盖其中一个内部功能。那种方式就是疯狂。

所以你要么:

use A qw ( somefunction ); 

将会进入'该函数并在本地命名空间中定义它。可以通过Exporter并设置@EXPORT@EXPORT_OK来修改这些内容的确切行为。

或者通过'包路径'来引用它。

A::somefunction(@arguments);

这也适用于变量,但您必须使用our而不是my来限定它们。

答案 1 :(得分:0)

未定义的错误可能是因为您的B.PM无法找到A.PM.你能尝试使用

吗?
use FindBin;
use lib "$FindBin::Bin/../lib";

或直接使用use lib "$folder containing A.pm"

另外,我不清楚你在哪里未定义。在您的perl脚本或B.PM模块中?

答案 2 :(得分:0)

我只想直接从perl模块(File :: Glob :: Windows)调用子(glob),而无需导入子glob,因为它与Moose冲突,并出现错误“用访问器覆盖本地定义的函数” “。

这为我指明了正确的方向:https://www.perlmonks.org/?node_id=623567

use File::Glob::Windows qw();   # Hide everything

...

File::Glob::Windows::glob(...); # Access sub explicitly