为什么我不能在Perl程序中调用导出的子程序?

Joe*_*Joe 3 perl module exporter

我是Perl的新手,我面临以下问题,不知道为什么跟随不起作用.

我的Perl模块包含:

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

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

sub whom(){
      print "whom\n";
}
1;
Run Code Online (Sandbox Code Playgroud)

我的Perl文件包含:

#!/usr/bin/perl -w

use pack;
use pack2 ('whom');

PACK::who();
&whom();
Run Code Online (Sandbox Code Playgroud)

我运行这个程序,找不到whom:

perl use_pack_pm.pl

who
Undefined subroutine &main::whom called at use_pack_pm.pl line 7.
Run Code Online (Sandbox Code Playgroud)

rei*_*ost 8

Perl是一种区分大小写的语言.我不认为模块"pack2"和"PACK2"是相同的.(但我实际上没有测试过这个.)

  • 有时保留案例但不区分大小写的文件系统可以让人们摆脱这些案例问题. (3认同)

Ven*_*tsu 5

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

BEGIN {
    require pack2;
    pack2->import('whom');
}
Run Code Online (Sandbox Code Playgroud)

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

没有任何警告,因为Perl很难说这是故意做的.大多数OO模块不会导出任何函数或变量,因此它们不会提供import函数.