2017-08-01 57 views
-3

早上好,我有這樣的代碼:爲什麼此代碼與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模塊,但是當我評論說一種出來,以下模塊也導致同樣的錯誤消息。

這是錯誤消息我收到

在@公司無法找到CGI.pm(您可能需要安裝CGI模塊)(@公司包含:在/ usr /本地/ lib64下/ perl5的。在/ usr/local/share下/ perl5的在/ usr/lib64下/ perl5的/ vendor_perl在/ usr /在main.pl線5股/的perl5/vendor_perl在/ usr/lib64下/ perl5的在/ usr /共享/ perl5的)開始的失敗 - 編譯中止在main.pl線5

我試着在聯機編譯器中運行並出現錯誤。通過在編譯之前在計算機中安裝缺少的模塊來解決這個問題嗎?你推薦哪個IDE來測試這個代碼?

tl; dr解決方案如下:我需要安裝缺少的模塊。

+1

什麼是錯誤信息? – Jens

+0

對不起,我以前忘了附加。這是我收到的錯誤消息:無法在@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行 –

+3

沒有安裝CGI模塊 – Jens

回答

2

該錯誤消息似乎非常清楚對我說:

在@公司無法找到CGI.pm(您可能需要安裝CGI模塊)

哪個版本的Perl是你在用嗎? CGI.pm是從5.004到5.20的核心Perl模塊。從5.22開始,CGI.pm已從Perl核心發行版中刪除。您需要單獨安裝。

但它是值得考慮的,爲什麼CGI.pm從Perl的核心移除的原因 - 這是因爲它是不寫使用Perl的Web應用程序在2017年推薦的方式我推薦的一些更現代的概述閱讀CGI::Alternatives技術。

但是,因爲你已經有一個CGI程序,我假設你不希望重寫一切從頭開始,以反映現代Perl的最佳實踐。但是,我會敦促您從代碼中刪除使用HTML生成函數。自從上個千年結束以來,我們知道他們是一個可怕的想法,they are now deprecated。請考慮將您的HTML生成轉換爲某種模板(在上面提到的CGI :: Alternatives文檔中使用了Template Toolkit的示例)。

您同時還使用子程序原型。除非您使用少量的添加有用功能的情況之一,否則他們的使用也受到強烈的阻止。我建議刪除它們。

更新:在你的評論,你說:

什麼我沒得到的是爲什麼我錯過了那麼多模塊「顯然」。

看在你的代碼的模塊列表:

  • CGI被添加到核心在5.004和5.22去除。
  • CGI ::鯉魚被添加和刪除與CGI相同的時間。
  • LWP :: Simple從來沒有出現在Perl核心發行版中。但是從Perl 5.14開始,核心包含了HTTP :: Tiny,它可以完成許多相同的功能。
  • List :: Util自5.8以來一直處於Perl核心。

所以我認爲,主要是你的問題是假設更多的庫在覈心比實際是。

+0

非常感謝您的解釋。你看,我以前沒有用Perl編碼......我沒有得到的是爲什麼我「很顯然」錯過了那麼多模塊。現在,我明白爲什麼。不幸的是,我無法重做所有的工作,因爲我幾乎沒有時間檢查它的工作原理。但我會注意到,作爲編碼練習或未來。我非常感謝你的洞察力@Dave Cross。 –

+0

Re「*我沒有得到的是爲什麼我錯過了這麼多模塊*」,基本上,Perl帶有它需要安裝其他模塊的模塊,以及其他一些模塊,這是出於歷史原因。這是非常多的。 – ikegami