簡體   English   中英

Perl&library1 :: func1中的未定義子例程

[英]Undefined subroutine in perl &library1::func1

我正在從library1.pm中的library2.pm調用函數(func1)。 由於我在library1中聲明了“ use library2”,因此該函數簡稱為&func1()。 但這會引發錯誤,因為未定義的子例程。 但是當我將該函數稱為“&library2 :: func1”時,它正在工作。 我在這里缺少任何Perl軟件包嗎?

您導出功能了嗎? 由於您沒有發布任何代碼,很難說出您丟失了什么! 我可以解釋一下,如果我知道缺少的東西,為什么您需要缺少的東西。 取而代之的是,您必須解決所需的示例。

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的原型。


順便說一下,小寫的模塊名稱在技術上保留給Perl使用。 但更重要的是,約定為編譯指示模塊(影響語言的模塊和實際上受到詞法作用域的模塊)保留了小寫的模塊。 請避免使用小寫的模塊名稱。


順便說說,

use library2 qw( func1 );

通常比

use library2;

因為更容易查看在何處定義了子項,並且在模塊的默認導出發生更改時也可以防止出現意外情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM