0

テーブル「投稿」を照会しています。そのフィールド username と content は utf8 中国語です。Windowsコンソールで印刷するには、それらをbig5に変換する必要があります。スクリプトがコンパイルに失敗し、ENCODE ルーチンが再定義されているというエラーが報告されます。

DBI なしでエンコード/デコードをテストする別のスクリプトがあり、正常に動作します。どうすれば修正できますか?

スクリプト:

use DBI;
use strict;
use ENCODE qw /encode decode/;

my $dbh = DBI->connect("dbi:SQLite:dbname=tweetylicious.db","","",{sqlite_unicode => 1});
$dbh->do("PRAGMA foreign_keys = ON");

my $result_aref = $dbh->selectall_arrayref("SELECT * FROM post");

foreach my $user ( @$result_aref ) {
    my $name = ${$user}[1];
    my $content = ${$user}[2];
    print encode("utf8", $name), " : ",$content, "\n";
}

エラー:

subroutine DEBUG redefined at path-to-lib/ENCODE.pm line 144
subroutine encoding redefined at path-to-lib/ENCODE.pm line 164
...
4

1 に答える 1

3

大文字と小文字を区別しないファイルシステム (通常は Windows) を使用している場合、大文字とuse小文字が間違っているモジュールを ing すると、このようなメッセージが表示される可能性があります。

短い答え:(use Encode (...)大文字に注意してください)

より長い答え: Perl は大文字と小文字を区別します。間違っuseた大文字を使用してモジュールを作成するrequireと、ジョブの一部が をシークENCODE.pmし、ロードして に保存し%INCます。しかし、コードの他の部分がuse適切な名前でそれを試みた場合 ( の場合、これは-> ->ループEncodeを介して発生します)、 でそれが見つからず、再度ロードされ、それらすべての再定義メッセージがトリガーされます。 .EncodeEncode::AliasEncode%INC

意図したモジュール名を使用すると、これを回避できます。

于 2011-02-16T15:31:43.880 に答える