perl中的第一个cgi脚本,不知道它的作用

时间:2013-05-12 22:09:33

标签: perl apache cgi

我是Perl的新手,我正在研究CGI程序 我从Perl Monks尝试了以下内容,但它确实有效。但我不知道它做了什么 1)什么是END_HERE?之后是HTML? :

print <<END_HERE;   
<html>  
  <head>  
    <title>My First CGI Script</title>  
  </head>  
  <body bgcolor="#FFFFCC">  
    <h1>This is a pretty lame Web page</h1>  
    <p>Who is this Ovid guy, anyway?</p>   
  </body>   
</html>  
END_HERE   

2)我通过添加:

修改了示例脚本
my $query = new CGI;  
my $p= $query->param('myparam');  

即。新脚本是:

#!C:\perl\bin\perl.exe -wT
use strict;
use CGI;

my $query = new CGI;


print $query->header( "text/html" );

my $time = $query->param('fromDate');

print <<END_HERE;  
   <html>  
     <head>  
       <title>My First CGI Script $time</title>  
     </head>  
     <body bgcolor="#FFFFCC">  
       <h1>This is a pretty lame Web page</h1> 
       <p>Who is this Ovid guy, anyway?</p> 
     </body>  
   </html>  
END_HERE  


# must have a line after "END_HERE" or Perl won't recognize
# the token

它停止了工作。我收到以下错误消息:

Undefined subroutine &main::param called at C:/.../test2.cgi line 10.

如果不是这样,我如何获取浏览器发送的参数?

1 个答案:

答案 0 :(得分:2)

... <<END_HERE ...
foo
bar
END_HERE

装置

... "foo
bar
" ...

终结者的选择取决于您。如果添加引号,则可以使用任何裸字或任何字符串。以下两项等同于"foo\nbar\n"

<<MEOW
foo
bar
MEOW

<<"And they lived happily ever after."
foo
bar
And they lived happily ever after.

您发布的脚本有两个问题,它们都没有导致您指定的错误。

  1. Perl找不到here-doc的结尾,因为没有行只包含END_HERE。你有一个包含END_HERE和一大堆前导空格的东西,但这不是一回事。删除前导空格。

  2. 它允许将任意字符串放在HTML中。逃避(使用,例如,HTML::Entitiesencode_entities)!考虑如果有人将以下内容传递给fromDate参数会发生什么:

    <script>alert("owned")</script>