2013-04-11 56 views
0

为什么我无法访问子包我不能工作了:如果我用同样的无法加载Perl的分包

#!/usr/bin/perl -w 

package MbzDb::Instance; 

use strict; 
use warnings; 
use Getopt::Long; 
require Exporter; 
our @ISA = qw(Exporter); 
our @EXPORT = qw(new startFromCommandLine); 

sub new { 
    my $class = shift; 
    return bless {}, $class; 
} 

sub startFromCommandLine { 
    my $self = shift; 
} 

mbzdb

#!/usr/bin/perl -w 

use lib "./lib"; 
use MbzDb::Instance; 

my $instance = new MbzDb::Instance(); 
$instance->startFromCommandLine(); 

lib/MbzDb/Instance.pm代码lib/MbzDb.pm导出正常。我究竟做错了什么?

给出的错误是:

无法找到对象的方法“新”经包装“MbzDb ::实例”(也许你忘了装载“MbzDb ::实例”?)在./mbzdb line 6.

+0

是否在LIB相同的代码工作/ Mbzdb.pm如果你注释掉使用LIB? – 2013-04-11 07:21:26

+0

如果我删除'use lib“./lib”;'那么它无法找到该模块。如果我删除它并将'.pm'移到另一个位置,我会得到相同的错误。 – 2013-04-11 07:28:36

+0

嗯,并且在MbzDb下没有另一个lib目录(例如lib/Mbzdb/lib? – 2013-04-11 07:32:17

回答

0

尝试使用优秀的FindBin模块。

use FindBin; 
use lib $FindBin::Bin . '/lib'; 
use MbzDb::Instance; 

这个工作,如果你的结构是这样的:

mbzdb 
lib/ 
    MbzDb/ 
    Instance.pm