在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
我将获得以下输出:
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 来弄清楚这一点。