在 ./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游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据