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 的定义位置,并且如果模块的默认导出发生变化,它可以防止意外。
我在 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 的定义位置,并且如果模块的默认导出发生变化,它可以防止意外。