Perl:不能使用'defined(%hash)'



在MacOS 10.13.6高级Sierra上,我想转换我以EML格式文件导出的邮件列表(带有Thunderbird(,将其转换为HTML文件。

要执行此操作,我已经安装了称为" Mhonarc"的工具。

但是,在执行时,当我这样做时:

mhonarc -outdir /Users/peter/Mails_HTML /Users/peter/Mails

我有以下错误:

Can't use 'defined(%hash)' (Maybe you should just omit the   defined()?) at /opt/local/lib/perl5/vendor_perl/5.28/darwin-thread-multi-2level/mhamain.pl line 1565.
Compilation failed in require at /opt/local/bin/mhonarc line 39.

我不知道我是否有正确的perl版本。我已经通过macports安装了Perl5.26和Perl5.28以及以下3个Macports软件包:

p5-mhonarc @2.6.19 (perl)
MHonArc - mail and news munging
p5.26-mhonarc @2.6.19 (perl)
MHonArc - mail and news munging
p5.28-mhonarc @2.6.19 (perl)
MHonArc - mail and news munging

完成后:sudo port searc mhonarc

我认为高塞拉的本机Perl与macports安装的Perl软件包之间存在冲突。

编辑1

如果我做which perl,我会得到:/opt/local/bin/perl,所以我推断我正在使用macports安装的版本。

此处已安装并可能由mhonarc使用:

$ /opt/local/bin/perl --version
This is perl 5, version 26, subversion 3 (v5.26.3) built for darwin-  thread-multi-2level
Copyright 1987-2018, Larry Wall

$ /usr/bin/perl --version
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)
Copyright 1987-2013, Larry Wall

编辑2

我遵循@choroba完成的建议:我替换了所有 all defined(%variable_name) by just %variable_name

因此,命令mhonarc -outdir /Users/peter/Mails_HTML /Users/peter/Mails不会产生错误,但是现在的问题是,目录/Users/peter/Mails_HTML

在HTML格式下未产生任何邮件

我将获得以下输出:

This is MHonArc v2.6.19, Perl 5.028002 darwin
Converting messages to /Users/peter/Mails_HTML/
Reading /Users/peter/Mails 
Writing mail 
Writing /Users/peter/Mails_HTML//maillist.html ...
Writing /Users/peter/Mails_HTML//threads.html ...
Writing database ...
0 total messages

这种行为的起源是什么?

编辑3

问题最终由修改后的命令行解决:

mhonarc -outdir /Users/peter/Mails_HTML /Users/peter/Mails/*

/Users/peter/Mails_HTML目录中生成所有HTML文件。只有电子邮件的日期缺少,我将研究添加此信息的研究。

perl v5.6.1弃用了defined在集合上的使用,但是许多事情已被弃用并坐在那里。然后,远后,Perl开发人员开始处理这些折旧。perl v5.16开始警告,v5.22终于使其致命。

幸运的是,您已将v5.18安装为/usr/bin/perl (系统 perl (,因此您可以使用它。但是,您需要注意使用v5.18,因为MacOS System Perl 实际上是两个不同的版本(在某个时候尝试strings(。

$ ls /usr/bin/perl5*
/usr/bin/perl5.18   /usr/bin/perl5.28

默认情况下,我得到了较早的(支持defined %hash(。这样,MacOS系统可以使用较早的 perl ,他们有很长的时间进行测试和稳定:

$ /usr/bin/perl -v
This is perl 5, version 18, subversion 4 (v5.18.4) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

但是,作为用户,我可以告诉 perl 我想要哪个版本:

$ env VERSIONER_PERL_VERSION=5.28 /usr/bin/perl -v
This is perl 5, version 28, subversion 2 (v5.28.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

我还可以选择一个作为用户(而不是系统(流程的默认值:

$ defaults write com.apple.versioner.perl Version 5.28
$ defaults read com.apple.versioner.perl Version
5.28

但是,还要注意苹果公司已承诺不分发脚本语言运行时。到目前为止,他们尚未关闭,但是最终您必须使用安装自己的 perl 来弄清楚这一点。

相关内容

  • 没有找到相关文章

最新更新