2016-10-14 90 views
1

我有一个名为McuEnc.pm一个Perl模块,它位于/首页/埃里克/ temp目录:未定义子程序及主要:: key_enc

package McuEnc; 

use 5.010; 
use strict; 
use warnings; 
use Exporter qw(import); 

our @EXPORT_OK = qw(key_enc data_enc data_dec); 

sub key_enc { some code } 
sub data_enc { some code } 
sub data_dec { some code } 

1; 

我有一个Perl脚本名为test.pl也位于在/ home/eric/temp目录下:

use 5.010; 
use strict; 
use warnings; 
use McuEnc qw(key_enc data_enc data_dec); 

key_enc("1111"); 
... 

我已将工作目录更改为/ home/eric/temp。现在,如果我运行test.pl脚本,它将正确运行。但是,如果我创建一个新的目录/ home /埃里克/温度/我和McuEnc.pm文件移动到它,然后修改test.pl脚本follwoing:

use 5.010; 
use strict; 
use warnings; 
use My::McuEnc qw(key_enc data_enc data_dec); 

key_enc("1111"); 
... 

然后我发现了以下错误当我test.pl再次运行:

McuEnc::key_enc("1111"); 

那么,为什么我收到错误消息:

Undefined subroutine &main::key_enc called at ./test line 6. 

不过,我仍然可以正确地调用子程序?哪里不对?

+6

打算让快速猜测,并说这是因为'use'语句与'package'语句不匹配。试试'包My :: McuEnc',看看它是否有效? – Sobrique

+0

它的工作原理!非常感谢你。 –

+2

@Sobrique你应该把它作为答案 – stevieb

回答

0

这是在评论回答Sobrique,但它从来没有张贴作为官方的回答:“在use语句不符合包语句尽量打包My::McuEnc而不是”

相关问题