perl& library1 :: func1中未定义的子例程

时间:2017-02-21 04:24:28

标签: perl perl-module

我从library1.pm中的library2.pm调用一个函数(func1)。该函数简称为& func1(),因为我声明"使用library2"在library1。但这是一个错误,因为未定义的子程序。但当我把这个功能称为" & library2 :: func1"这是工作。我在这里错过任何Perl包吗?

1 个答案:

答案 0 :(得分:2)

你导出了这个功能吗?因为你没有发布任何代码,所以很难说你错过了什么!如果我知道它是什么,我可以解释为什么你需要缺少什么。相反,你必须得到一个所需要的例子。

library2.pm应包括:

package library2;

use strict;
use warnings;

use Exporter qw( import );

our @EXPORT = qw( func1 );

...

sub func1 { ... }

...

1;

library1.pm应包括:

package library1;

use strict;
use warnings;

use library2;

...

func1(...)

...

1;

顺便说一下,语言的名称是Perl,而不是PERL。它不是首字母缩略词。

顺便说一下,你应该在子调用前停止使用&;我没有理由告诉Perl忽略你所调用的潜艇的原型。

顺便说一句,小写模块名称在技术上保留供Perl使用。但更重要的是,约定为pragma模块(影响语言的模块和有效的词法范围的模块)保留了小写模块。请避免使用小写模块名称。

顺便说一下,

use library2 qw( func1 );

通常优于

use library2;

因为它更容易看到子定义的位置,并且如果模块的默认导出发生变化,它可以防止出现意外。

相关问题