首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有package..Perl的情况下无法调用"disconnect“方法

在没有package..Perl的情况下无法调用"disconnect“方法
EN

Stack Overflow用户
提问于 2012-05-15 04:56:52
回答 3查看 1.1K关注 0票数 2

我写了一个perl模块:

代码语言:javascript
复制
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;

我试着使用它:

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use sql;

&Query("SELECT * FROM users");

但它不起作用。

错误消息:未定义的子例程&main::查询在/var/www/domain/gabordx.tauri.hu/www/main.pl第7行调用。-> "&Query("SELECT * FROM users");“

问题出在哪里?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-15 05:18:24

您还需要导出Query,如下所示:

代码语言:javascript
复制
our @EXPORT_OK = qw(Query DBImport DataFill);
our @EXPORT = qw(Query DBImport DataFill);

否则,您应该通过sql包引用它,如下所示

代码语言:javascript
复制
sql::Query("SELECT * FROM users");
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 05:15:36

您可以直接调用它,在前面加上模块名称:

代码语言:javascript
复制
sql::Query("SELECT * FROM users");

或者,您可以从模块导入它

代码语言:javascript
复制
our @EXPORT_OK = qw(Query DBImport DataFill); # In the module

use sql qw(Query); # In caller code

也可以默认从sql.pm中导出它

代码语言:javascript
复制
our @EXPORT = qw(Query DBImport DataFill);

@EXPORT@EXPORT_OK的参考:http://perldoc.perl.org/Exporter.html#How-to-Export

票数 2
EN

Stack Overflow用户

发布于 2012-05-15 05:14:07

一种方法是导出函数:

代码语言:javascript
复制
our @EXPORT = qw(DBImport DataFill Query);

perldoc Exporter

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10590910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档