2012-05-14 31 views
2

我寫了一個Perl模塊:無法調用 「斷開」 沒有package..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 = "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. - > 「&查詢(」 SELECT * FROM用戶「) ;」

有什麼問題?

謝謝!

+0

請注意,所有小寫模塊名稱[通常保留爲pragmas](http://perldoc.perl.org/perlmodlib.html#Guidelines-for-Module-Creation)。另外,你不需要顯式地導入DBD :: mysql,因爲'DBI-> connect()'會爲你加載正確的驅動程序。 – pilcrow

回答

1

需要導出Query爲好,像這樣:

our @EXPORT_OK = qw(Query DBImport DataFill); 
our @EXPORT = qw(Query DBImport DataFill); 

否則你應該通過sql包來提及它,像這樣

sql::Query("SELECT * FROM users"); 
2

您可以直接調用它的前面加上模塊名稱:

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_OKhttp://perldoc.perl.org/Exporter.html#How-to-Export

相關問題