使用不推荐使用的perl脚本运行diogenes,如何为较新版本重写此代码?

时间:2019-02-16 14:31:53

标签: perl

我已经在以下链接中搜索了与此主题相关的几个主题,并且使用的链接完全相同(在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

:)

3 个答案:

答案 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起提出不推荐使用的警告。

所以这里发生的是:

  • Diogenes包括一个CGI.pm的旧版本,该版本使用了不赞成使用的语法。
  • Diogenes不包括Perl编译器的版本。
  • 您现在使用的是Perl版本,该版本已将此不建议使用的语法警告转变为致命错误。

您似乎有三个选择:

  • 降级到Perl的早期版本(5.22之前的版本),该版本会对此语法发出警告。
  • 删除Diogenes安装的CGI.pm副本,并从CPAN安装最新版本的CGI.pm(2012年发布的3.60版,已修复此错误)。
  • 没有Diogenes安装的CGI.pm副本,就可以将defined(@QUERY_PARAM)仅替换为@QUERY_PARAM

在评论中,您提到尝试尝试列表中的最后一条建议并遇到其他问题。看起来这也是由于Diogenes上次更新以来十二年来Perl语法(这次是regex语法)的变化所引起的。而且,当然,修复可能会发现另一个类似的问题。

总而言之,可能有必要联系Diogenes的作者并解释您在现代版本的Perl中使用该软件时遇到的问题。即使作者没有时间解决问题,也有可能他们可以向网站添加警告,告诉人们这些问题。

答案 2 :(得分:-2)

尝试将其更改为exists

如果目的是测试非空性,这也可以工作:

if (@QUERY_PARAM && !$initializer) {

相关问题