2012-05-14 2 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"); 

, но это не работает.

сообщение об ошибке: Не определено подпрограммой & главная :: Query вызывается в /var/www/domains/gabordx.tauri.hu/www/main.pl линии 7. -> "& Query (" SELECT * FROM пользователей ") ;»

В чем проблема с?

Спасибо!

+0

Обратите внимание, что имена всех нижних регистров [обычно зарезервированы для прагм.] (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_OK: http://perldoc.perl.org/Exporter.html#How-to-Export

Смежные вопросы