如果不使用包含模块标识符的文件夹,则无法从perl模块访问函数

时间:2016-01-12 10:55:34

标签: perl dbi

我有一个名为perl的{​​{1}}模块,其中包含用于使用Mysql_Routines操纵mysql数据的各种函数。我导出这些函数如下:

DBI

使用以下代码从其他脚本和模块访问它们:

package Mysql_Routines;

use DBI;
use strict;
use warnings;
use Data::Dumper;

use Exporter qw(import);
our @EXPORT_OK = qw(connect_to insert_row get_rows);

这似乎都是标准做法,如Perl Maven所述。但是,我只能通过使用模块标识符调用这些函数,或者我得到一个错误,它是一个未定义的子例程。例如:

use my_modules::Mysql_Routines qw (connect_to insert_row get_rows);

作品。

my $dbh = Mysql_Routines::connect_to('./config/mysql-local.conf');

引发以下错误:

my $dbh = connect_to('./config/mysql-local.conf');

这显然不是一个大问题,虽然我想了解为什么会这样,因为我似乎遵循了创建包含函数的模块的正确指南。

请参阅下面的解决方案。包声明应包含顶级目录。愚蠢的错误。

2 个答案:

答案 0 :(得分:4)

您似乎对模块的名称感到困惑。它是" Mysql_Routines"或者" my_modules :: Mysql_Routines"?我怀疑你希望它被称为#34; Mysql_Routines",在这种情况下你的use my_modules::Mysql_Routines是不寻常的。你不能拥有use Mysql_Routines吗?

我想答案是你的模块位于名为" my_modules"的目录中。在这种情况下,正确的方法是将该目录添加到库搜索路径。您可以使用以下代码:

use lib 'my_modules';
use Mysql_Routines';

答案 1 :(得分:0)

我发现问题在于模块的包声明中我没有包含顶级目录。

package Mysql_Routines更改为package my_modules::Mysql_Routines可解决问题。使用此解决方案,库搜索路径不需要像建议的那样进行更新。