我正在查询表“帖子”;它的字段用户名和内容是utf8 chinese。我需要将它们转换为big5才能在Windows控制台中打印。我的脚本无法编译,报告了重新定义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
...
答案 0 :(得分:3)
如果您使用不区分大小写的文件系统(通常在Windows上),{{1}使用错误案例的模块可能会导致此类消息。
简短回答:use
(注意大写)
更长的答案:Perl区分大小写。当use
模块使用错误的大小写时,作业的use Encode (...)
部分会搜索require
,加载并将其存储在ENCODE.pm
中。但是,当代码的任何其他部分尝试%INC
以其专有名称use
时,这会通过Encode
- > Encode
- > { {1}}循环),它不会在Encode::Alias
中找到它,会再次加载它,并触发所有这些重定义消息。
使用预期的模块名称可以避免这种情况。