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

Why does this code have issues with the CGI module?

早上好,我有这个代码:

#!/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模块,但是当我注释掉那个时,下面的模块也会导致同样的错误信息。

这是我收到的错误信息

Can't locate CGI.pm in @INC (you may need to install the CGI module) (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5 /vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at main.pl line 5. BEGIN failed--compilation aborted at main.pl line 5

我在在线编译器中尝试 运行ning,但出现错误。在编译之前在计算机中安装那些缺少的模块是否可以解决这个问题?您推荐哪个 IDE 来测试此代码?

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

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

Can't locate CGI.pm in @INC (you may need to install the CGI module)

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

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

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

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

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

what I didn't get is why I was missing so many modules "apparently".

查看代码中的模块列表:

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

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