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

Undefined subroutine in perl &library1::func1

我在 library1.pm 中从 library2.pm 调用一个函数 (func1)。该函数被简单地称为 &func1(),因为我在 library1 中声明了“use library2”。但这是作为未定义的子例程抛出错误。但是当我将该函数称为“ &library2::func1 ”时,它正在工作。我在这里缺少任何 Perl 包吗?

你导出函数了吗?很难说您缺少什么,因为您没有 post 任何代码!如果我知道它是什么,我可以解释为什么你需要缺少的东西。相反,您将不得不接受所需的示例。

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 忽略你调用的 subs 的原型。


顺便说一句,lower-case 模块名称在技术上保留供 Perl 使用。但更重要的是,约定为 pragma 模块(影响语言的模块,以及 lexically-scoped 生效的模块)保留了 lower-case 模块。请避免使用 lower-case 模块名称。


顺便说一句,

use library2 qw( func1 );

总体上优于

use library2;

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