0

我正在查询表“post”;它的字段用户名和内容是utf8中文。我需要将它们转换为 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
...
4

1 回答 1

3

如果您使用的是不区分大小写的文件系统(通常是在 Windows 上),use则使用错误大小写的模块可能会导致此类消息。

简短回答:(use Encode (...)注意大写)

更长的答案:Perl 区分大小写。当您use的模块使用错误的大小写时,该require部分作业将查找ENCODE.pm、加载并将其存储在%INC. 但是,当代码的任何其他部分尝试使用use其正确名称时(对于Encode,这是通过Encode-> Encode::Alias->Encode循环发生的),它不会在 中找到它%INC,将再次加载它,并触发所有这些重新定义消息.

使用预期的模块名称可以避免这种情况。

于 2011-02-16T15:31:43.880 回答