0

また、dbConnect not defined エラーを取得する方法もあります。問題が見つからないようです。dbConnect はパスワード付きのハード コードです。

#! perl


use strict;
use warnings;
use diagnostics;


use DBR qw(dbConnect query);

my $dbhead = dbConnect();
my $sql = "select * from mailing";
my @returned = query($dbhead,$sql);

DB.pmという名前の保存ディレクトリに保存されるモジュール。名前や内容を変更することはできません。

package GUI::DB;

use strict;
use DBI;
use warnings;


use vars qw(@ISA @EXPORT);
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(dbConnect query);

#
# dbConnect - connect to the database, get the database handle
#
sub dbConnect {

    # Read database settings from config file:
    my $dsn = "DBI:mysql:database=test";
    my $dbh = DBI->connect( $dsn,
            'abc',
            'password',
                            { RaiseError => 1 } 
);

    return $dbh;

}

#
# query - execute a query with parameters
#       query($dbh, $sql, @bindValues)
#
sub query {
    my $dbh = shift;
    my $sql = shift;
    my @bindValues = @_;            # 0 or several parameters

    my @returnData = ();

    # issue query
    my $sth = $dbh->prepare($sql);

    if ( @bindValues ) {
            $sth->execute(@bindValues);
    } else {
            $sth->execute();
    }

    if ( $sql =~ m/^select/i ) {
            while ( my $row = $sth->fetchrow_hashref ) {
                    push @returnData, $row;
            }
    }

    # finish the sql statement
    $sth->finish();

    return @returnData;
}


__END__

私が間違っているところを誰かが見てくれることを願っています。モジュールの下部にコードを記述して実行するだけで機能するため、モジュール内のサブルーチンが正しく機能することはわかっています。

4

2 に答える 2

0

OK、これは少し面倒です...これを機能させるための最も混乱しない方法は、DBR.pmを見つけて、GUIサブディレクトリを作成し(まだ存在しない場合)、DBR.pmをGUI/DBに移動することです.pm。次に、に変更use DBRするuse GUI::DBと、設定されます。

use DBRそれを修正する最も簡単な方法は、行を次のように置き換えることです。

use DBR;
GUI::DB->import(qw(dbConnect query));

DBR...しかし、それは将来のメンテナーを/のGUI::DB不一致によって混乱させ続けるでしょう。

ここでの問題はuse DBRと同等ですBEGIN { require DBR; DBR->import; }packageDBR.pmファイル内の は という名前GUI::DBであるため、DBR->import何もしません。間違ったパッケージからシンボルをインポートしようとしています。import正しいパッケージから ( を使用してGUI::DB->import)手動で呼び出すと、これは修正されますpackage、ファイルとパッケージの両方に同じ名前を付けるという標準的な規則に従うように、モジュール ファイルの名前を変更する (またはそのファイル内の名前を変更する) ことをお勧めします。を含む。

于 2013-10-22T08:25:42.710 に答える