我有一个名为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');
这显然不是一个大问题,虽然我想了解为什么会这样,因为我似乎遵循了创建包含函数的模块的正确指南。
请参阅下面的解决方案。包声明应包含顶级目录。愚蠢的错误。
答案 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
可解决问题。使用此解决方案,库搜索路径不需要像建议的那样进行更新。