在没有包的情况下无法调用方法“disconnect”..Perl
我编写了一个perl模块:在没有包的情况下无法调用方法“disconnect”..Perl,perl,module,dbi,Perl,Module,Dbi,我编写了一个perl模块: package sql; use strict; use XML::Simple; use DBI; use DBD::mysql; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(DBImport DataFill); our @EXPORT = qw(DBImport DataFill); our $dbh; sub DBConnect() { my $platform =
package sql;
use strict;
use XML::Simple;
use DBI;
use DBD::mysql;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(DBImport DataFill);
our @EXPORT = qw(DBImport DataFill);
our $dbh;
sub DBConnect() {
my $platform = "mysql";
my $database = "databasename";
my $host = "localhost";
my $user = "user";
my $pw = "password";
my $dsn = "dbi:mysql:$database:localhost";
$dbh = DBI->connect($dsn, $user, $pw);
$dbh->do('SET NAMES utf8');
return $dbh;
}
sub Query($) {
my $sth = $dbh->prepare(shift);
$sth->execute;
while (my $ref = $sth->fetchrow_hashref()) {
print $ref->{'email'};
}
$sth->finish();
}
BEGIN{
$dbh = &DBConnect();
}
END{
$dbh->disconnect();
}
1;
我试着用它:
#!/usr/bin/perl
use strict;
use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use sql;
&Query("SELECT * FROM users");
但它不起作用
错误消息:在/var/www/domains/gabordx.tauri.hu/www/main.pl第7行调用了未定义的子例程&main::查询。->&查询从用户中选择*
有什么问题吗
谢谢 一种方法是导出函数:
our @EXPORT = qw(DBImport DataFill Query);
您可以直接调用它,在模块名称前面加上前缀:
sql::Query("SELECT * FROM users");
也可以从模块中导入
our @EXPORT_OK = qw(Query DBImport DataFill); # In the module
use sql qw(Query); # In caller code
或者默认情况下可以从sql.pm导出它
our @EXPORT = qw(Query DBImport DataFill);
@EXPORT和@EXPORT\u OK的参考:您还需要导出查询,如下所示:
our @EXPORT_OK = qw(Query DBImport DataFill);
our @EXPORT = qw(Query DBImport DataFill);
否则,您应该通过sql包引用它,如下所示
sql::Query("SELECT * FROM users");
请注意,所有小写模块名称均为。此外,您不需要显式导入DBD::mysql,因为DBI->connect将为您加载正确的驱动程序。