为什么此代码与 CGI 模块有问题?



早上好,我有这个代码:

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use LWP::Simple;
use List::Util qw/min max sum/;
my $urlData = "http://cgi.csc.liv.ac.uk/cgi-bin/cgiwrap/~ullrich/data.pl";
my $title   = "Statistical analysis of weather data for a particular date";
#
# Display form with input fields
# Take a CGI object as input
#

等。。。

print $q->end_html;

我无法运行此代码,因为弹出有关模块的警告,但似乎没问题。知道发生了什么吗?

首先是CGI模块,但是当我注释掉那个模块时,以下模块也会导致相同的错误消息。

这是我收到的错误消息

无法在@INC中找到 CGI.pm(您可能需要安装 CGI 模块((@INC包含:/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor_perl/usr/share/perl5/vendor_perl/usr/lib64/perl5/usr/share/perl5 .( 在第 5 行 main.pl。BEGIN 失败 - 编译在第 5 行 main.pl 中止

我尝试在在线编译器中运行并遇到错误。在编译之前,通过在计算机中安装那些缺失的模块来解决这个问题吗?您建议使用哪个 IDE 来测试此代码?

tl;dr解决方案如下:我需要安装缺少的模块。

错误消息对我来说似乎很清楚:

在@INC中找不到 CGI.pm(您可能需要安装 CGI 模块(

你使用的是哪个版本的Perl?CGI.pm 是从5.004到5.20的核心Perl模块。从 5.22 开始,CGI.pm 已从 Perl 核心发行版中删除。您将需要单独安装它。

但值得考虑的是 CGI.pm 从 Perl 核心中删除的原因 - 这是因为它不是 2017 年使用 Perl 编写 Web 应用程序的推荐方式。我建议阅读CGI::Alternatives,以概述一些更现代的技术。

但是,由于您已经有一个 CGI 程序,我假设您不想从头开始重写它以反映现代 Perl 最佳实践。但是,我敦促您从代码中删除HTML生成函数的使用。自上个千年末以来,我们已经知道它们是一个糟糕的想法,现在它们已被弃用。请考虑将您的HTML生成移动到某种模板中(在我上面提到的CGI::Alternatives文档中有一个使用模板工具包的示例(。

您还在使用子例程原型。强烈建议不要使用它们,除非您使用的是它们添加有用功能的少数情况之一。我建议删除它们。

更新:在您的评论中,您说:

我不明白的是为什么我"显然"缺少这么多模块。

查看代码中的模块列表:

  • CGI 在 5.004 中被添加到核心,并在 5.22 中删除。
  • CGI::鲤鱼与CGI同时添加和删除。
  • LWP::Simple 从未出现在 Perl 核心发行版中。但是从Perl 5.14开始,核心包含了HTTP::Tiny,它做了很多同样的事情。
  • List::Util 从 5.8 开始就出现在 Perl 核心中。

所以我认为你的问题主要是假设核心中的库比实际的要多。

最新更新