Perl使用模块,不断获取Undefined子程序和主要错误

时间:2013-10-31 22:15:41

标签: mysql perl

我有一个perl模块DB.pm,里面有类似的东西:

package GUI::DB;
use strict;
use DBI;
use vars qw(@ISA @EXPORT);
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(fun);
sub fun {
    my $dsn = "DBI:mysql:database=test";
    return $dsn;
}

然后我写了test.pl:

#!/usr/bin/perl
use strict;
use warnings;
use lib '~/Downloads/GUI'; #Here is the path of the DB.pm module.
use DB;
my $aa = fun();

我一直试图修复它好几个小时,我试图使用评论perl -l /path/to/file aa.pl并且它没有给我任何错误,但脚本根本没有运行,我纯粹是Perl的新手,真的卡住了。 请帮帮我。

编辑:所以模块的名称是DB.pm,文件夹的名称现在是GUI,我在脚本中使用use DB,仍然无法正常工作,其中我应该保存DB.pm文件吗?

2 个答案:

答案 0 :(得分:3)

use HA;做了两件事。首先,它在perl库路径(@INC)中找到文件HA.pm。其次,它调用HA::->import()以允许HA模块执行它想要的任何初始化/导出;这取决于模块的包匹配其文件名。如果没有,则会静默跳过此初始化(即使方法不存在,对import方法的方法调用也不会生成错误。)

因此,在所需的包上显式调用import,或使包名与文件名匹配。

答案 1 :(得分:2)

Perl不理解~,请参阅How do I find a user's home directory in Perl?

您还需要向use lib提供GUI/DB.pm所在的目录并使用GUI::DB

use lib $ENV{HOME}."/Downloads";
use GUI::DB;