我是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.
如果不是这样,我如何获取浏览器发送的参数?
答案 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.
您发布的脚本有两个问题,它们都没有导致您指定的错误。
Perl找不到here-doc的结尾,因为没有行只包含END_HERE
。你有一个包含END_HERE
和一大堆前导空格的东西,但这不是一回事。删除前导空格。
它允许将任意字符串放在HTML中。逃避(使用,例如,HTML::Entities的encode_entities
)!考虑如果有人将以下内容传递给fromDate
参数会发生什么:
<script>alert("owned")</script>