在 ./MIME/Parser/Filer.pm 第 365 行调用未定义的子例程 utf8::SWASHGET
Posted
技术标签:
【中文标题】在 ./MIME/Parser/Filer.pm 第 365 行调用未定义的子例程 utf8::SWASHGET【英文标题】:Getting Undefined subroutine utf8::SWASHGET called at ./MIME/Parser/Filer.pm line 365 【发布时间】:2012-06-09 07:11:44 【问题描述】:我正在尝试从收到的电子邮件中提取附件,我正在使用以下与 MIME::Tools 相关的代码:
$parser = MIME::Parser->new();
$parser->output_dir("./tmp");
$message = $parser->parse_data($msg); # $msg contains the email contents
调用$parser->parse_data($msg)
时,脚本失败并显示以下内容:
在 ./MIME/Parser/Filer.pm 第 364 行调用未定义的子例程 utf8::SWASHGET
这恰好是 Filer.pm 文件中正则表达式匹配的第一个实例,所以我假设它与执行正则表达式匹配的方式有关。我之前放置了一个正则表达式匹配,只是为了查看它是否确实与此相关,并且它在那个确切的位置失败并出现相同的错误。
这方面有什么帮助吗?我检索电子邮件及其内容没有问题,但附件很麻烦。
我的 perl 版本是 5.8.9,MIME::Tools - 5.502,我不是 root 用户,遗憾的是无法访问 root 权限(我正在使用
BEGIN unshift @INC, "~email/mime";
在顶部,/mime 包含来自相关 CPAN 模块的所有 lib 文件夹,在本例中为 MIME)
提前非常感谢!
【问题讨论】:
跨帖perlmonks.org/?node_id=974419 【参考方案1】:在乐于助人的 perl 修士插话之后,问题是我使用的 shebang 指向的是旧版本的 perl(显然我们的工作环境中有两个 perl 版本,位于完全不同的位置,我不知道的)。
为什么旧版本会以这种方式运行仍然有点神秘,但我想解决这个问题的方法似乎是升级到新版本(正如另一篇文章中指出的那样)。
无论如何,我不太确定交叉发帖有多好,所以如果我的主题由于被发布在两个地方而感到多余,我深表歉意,我最初的动机是我会得到足够不同的回复。
【讨论】:
交叉发布是可以的只要你链接到其他版本,你忽略了。请参阅perlmonks.org/?node_id=909976 了解基本原理。以上是关于在 ./MIME/Parser/Filer.pm 第 365 行调用未定义的子例程 utf8::SWASHGET的主要内容,如果未能解决你的问题,请参考以下文章
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记