将网页中的文本块传递给perl脚本,然后返回到网页

问题描述:

我正在尝试执行以下操作。将网页中的文本块传递给perl脚本,然后返回到网页

获取用户在网站上输入TEXTAREA FORM的文本块,并将其传递给perl/cgi脚本,该脚本在每行之前添加行号。因此,例如:

diet coke 
potato chips 
gelato 

将成为

1 diet coke 
2 potato chips 
3 gelato 

我知道如何通过一个单值或者Perl脚本一堆值的,但是当我尝试做一个foreach(@array)添加一个行号是行不通的。想知道如何做到这一点。

我的HTML文件

<HTML> 
<BODY> 

<FORM ACTION="/cgi-bin/splitfoods.pl"> 
    <P>What did you eat today? <BR><TEXTAREA NAME="value" ID="value" style="width:900px;height\ 
:700px;background-color:#FFF8DC;font-size:20px"> 
    </TEXTAREA> 

<P><INPUT TYPE="SUBMIT" VALUE="Submit"> 
</FORM> 

</BODY> 
</HTML> 

和CGI文件(从matthewh)

#!/usr/bin/perl 

use CGI; 
use CGI qw(:standard); 


$query = new CGI; 

@foods = split('\n',$query->param("value")); 


# -- HTML STUFF -- 
print header; 
print start_html; 
for($i=1; $i<[email protected]; $i++) { 
    print "$i @foods[$i-1]"; 
    print "<br>"; 
} 
print end_html; 

请求看起来像

cgi-bin/splitfoods.pl?value=diet+coke%0D%0Apotato+chips%0D%0Agelato 

感谢

+0

你需要添加'$ query = new CGI;' – 2011-04-02 07:41:11

@foods = split('\n',$query->param('food')); 

for($i=1; $i<[email protected]; $i++) { 

    print "$i @foods[$i-1]\n"; 

} 
+0

请看我上面的完整代码。由于某种原因得到500服务器错误。文件是可执行的,所以不知道错误是什么 – racket99 2011-04-02 07:39:30

+0

你能检查错误日志吗?它会告诉你500错误的原因。 – 2011-04-02 07:40:32

+0

[错误]无法在/var/www/cgi-bin/splitfoods.pl第5行调用未定义值的方法“param”。 [error]脚本标题过早结束:splitfoods.pl – racket99 2011-04-02 07:43:08

这是一个更清洁,不太可能打破边缘情况。此外,编号是HTML而不是网络更自然。你真的应该阅读整个文档CGI,并始终开始与警告和严格的代码。

use strict; 
use warnings; 
no warnings "uninitialized"; 
use CGI ":standard"; 

# Scalar/array context matters with param()! 
my $food = param("value"); 
my @foods = split /\n/, $food; 

print 
    header(), 
    start_html(), 
    ol(li(\@foods)), 
    end_html(); 
+0

谢谢。有没有办法让我使用在perl文件输出中包含一个php头文件。我如何让cgi脚本包含一个splash标题或图像?谢谢 – racket99 2011-04-02 20:30:40

+0

@ racket99:真的,如果你已经在运行PHP,那么没有 这样做的理由。我个人\t更喜欢Perl,但\t PHP是 容易和强大的CGI。如果您觉得您必须这样做,您可以使用模块[PHP](http://search.cpan.org/perldoc?PHP)从Perl运行PHP 。如果你想用Perl CGI做更多的事情,它会做你想做的任何事情,只需检查文档。我建议学习类似[Template](http://search.cpan.org/perldoc?Template)的内容。 CGI是一把不错的瑞士军刀,但它对于“严肃”的代码并不理想。 – Ashley 2011-04-02 21:39:35