2011-02-16 59 views
0

我在查詢表格「post」;它的字段用戶名和內容是utf8中文。我需要將它們轉換爲big5以在Windows控制檯中打印。我的腳本無法編譯,報告ENCODE例程被重新定義的錯誤。perl編碼qw /編碼解碼/重新定義Encode.pm

我有另一個腳本來測試編碼/解碼沒有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 
... 
+0

在將`ENCODE`固定爲`Encode`並創建一個包含虛擬表的數據庫之後,我能夠運行該程序,但是我沒有收到您描述的錯誤。 – daxim 2011-02-16 13:58:03

回答

3

如果您使用的是不區分大小寫的文件系統(通常情況下,在Windows上),荷蘭國際集團use模塊與錯誤的情況下,可以導致這樣的消息。

簡短的回答:use Encode (...)(注意大小寫)

較長的答案:Perl是區分大小寫的。當您使用錯誤大小寫的模塊use時,作業的require部分將尋求ENCODE.pm,將其加載並存儲在%INC中。但是當代碼的任何其他部分嘗試使用use它的專有名稱(對於Encode,這是通過Encode - >Encode::Alias - >Encode循環發生的),它不會在%INC中找到它,將再次加載它,並且這觸發了所有這些重定義消息。

使用預期的模塊名稱可以避免這種情況。