为什么此代码与 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 核心中。
所以我认为你的问题主要是假设核心中的库比实际更多。
早上好,我有这个代码:
#!/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 核心中。
所以我认为你的问题主要是假设核心中的库比实际更多。