Perl:无法使用 'defined(%hash)'
Perl: Can't use 'defined(%hash)'
在 MacOS 10.13.6 High 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
和以下 3 个 macports 软件包安装了 perl5.26 和 perl5.28 :
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
我认为 High Sierra 的原生 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 系统 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
但是,请注意 Apple 已承诺 not distributing scripting language runtimes。到目前为止,他们还没有关闭它,但最终你将不得不使用你自己安装的 perl 来解决这个问题。
在 MacOS 10.13.6 High 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
和以下 3 个 macports 软件包安装了 perl5.26 和 perl5.28 :
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
我认为 High Sierra 的原生 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 系统 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
但是,请注意 Apple 已承诺 not distributing scripting language runtimes。到目前为止,他们还没有关闭它,但最终你将不得不使用你自己安装的 perl 来解决这个问题。