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

时间:2017-08-01 10:10:49

标签: perl module 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。)在main.pl第5行.BEGIN失败 - 编译在main.pl第5行中止

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

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

1 个答案:

答案 0 :(得分:2)

错误信息对我来说非常清楚:

  

无法在@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生成函数的使用。自上个世纪末they are now deprecated以来,我们已经知道它们是一个可怕的主意。请考虑将您的HTML生成移动到某种模板中(在我上面提到的CGI :: Alternatives文档中使用Template Toolkit就是一个例子)。

您还在使用子程序原型。除非您使用少量添加有用功能的情况,否则强烈建议不要使用它们。我建议删除它们。

更新:在评论中,您说:

  

我没有得到的是为什么我错过了这么多模块"显然"。

查看代码中的模块列表:

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

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