我已经在以下链接中搜索了与此主题相关的几个主题,并且使用的链接完全相同(在Linux上运行diogenes),但是由于提交内容含糊不清,该链接已关闭:
Running old perl script (2007)
因此,错误消息是这样的:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /usr/local/diogenes/perl/CPAN/CGI.pm line 449.
Compilation failed in require at ./diogenes-server.pl line 42.
BEGIN failed--compilation aborted at ./diogenes-server.pl line 42.
在CGI.pm的第449行有:
if (defined(@QUERY_PARAM) && !defined($initializer)) {
因此,请仔细阅读一下,似乎此代码是错误的,并且在更高版本的perl中已弃用该代码。作为Diogenes这样的旧软件,这似乎是正确的。因此,我该如何重写才能继续。
最后,我正在按照本教程讲解如何在linux上运行diogenes,对perl编程一无所知: http://community.dur.ac.uk/p.j.heslin/Software/Diogenes/linux_install.php。
:)
答案 0 :(得分:3)
如defined
中所述(并在错误消息中提到),请尝试更改此内容:
if (defined(@QUERY_PARAM) && !defined($initializer)) {
对此:
if (@QUERY_PARAM && !defined($initializer)) {
答案 1 :(得分:2)
问题实际上并不是Diogenes本身。问题在于Diogenes打包了它使用的所有CPAN模块,其中包括2004年以来的CGI.pm版本。
这不是问题,只是您要在更新得多的Perl版本-Perl 5.22或更高版本上运行它。 perldelta for Perl 5.22包括以下内容:
已定义(@array)和已定义(%hash)现在是致命错误
自v5.6.1开始不推荐使用,自v5.16起提出不推荐使用的警告。
所以这里发生的是:
您似乎有三个选择:
defined(@QUERY_PARAM)
仅替换为@QUERY_PARAM
。在评论中,您提到尝试尝试列表中的最后一条建议并遇到其他问题。看起来这也是由于Diogenes上次更新以来十二年来Perl语法(这次是regex语法)的变化所引起的。而且,当然,修复可能会发现另一个类似的问题。
总而言之,可能有必要联系Diogenes的作者并解释您在现代版本的Perl中使用该软件时遇到的问题。即使作者没有时间解决问题,也有可能他们可以向网站添加警告,告诉人们这些问题。
答案 2 :(得分:-2)
尝试将其更改为exists
。
如果目的是测试非空性,这也可以工作:
if (@QUERY_PARAM && !$initializer) {