3

I am new to Perl and I face following issue, having no clue why following is not working.

My Perl module contains:

package PACK2;
use Exporter;
@ISA = ('Exporter');
@EXPORT_OK=('whom');

sub why(){
    print "why\n";
}

sub whom(){
      print "whom\n";
}
1;

My Perl file contains:

#!/usr/bin/perl -w

use pack;
use pack2 ('whom');

PACK::who();
&whom();

I run this program and can't find whom:

perl use_pack_pm.pl

who
Undefined subroutine &main::whom called at use_pack_pm.pl line 7.
4

3 回答 3

8

Perl 是一种区分大小写的语言。我不认为模块“pack2”和“PACK2”是一样的。(但我还没有实际测试过。)

于 2010-09-15T15:26:17.980 回答
5

在内部use pack2 ('whom');被翻译成类似的东西

BEGIN {
    require pack2;
    pack2->import('whom');
}

除了 perl 会在尝试调用它之前检查它是否可以import调用pack2。在您的示例中,没有命名包pack2,因此没有import要调用的函数。如果你的包名和文件名匹配,那么 perl 会找到import.Exporter

对此没有任何警告,因为 Perl 很难判断这是何时故意进行的。大多数 OO 模块不会导出任何函数或变量,因此它们不会提供import函数。

于 2010-09-15T16:03:24.697 回答
0

在未在包中声明完整路径的情况下使用子文件夹树中的模块出现相同的错误。

您应该使用其路径编写包语句。对于位于子目录Dirwrite中的模块package Dir::Module;,不是package Module ;. 然后它工作。

于 2016-02-02T13:51:02.773 回答