Perl:简单表单提交会将URL追加到当前URL
所以。我是perl新手。这个简单的脚本只需要创建一个具有指定维度的表,显示数字,就像在times表中一样。我试图通过记录路径信息来记录脚本的刷新次数,如:script.cgi/1 除非刷新,否则它会执行以下操作: script.cgi(首次使用) script.cgi/1 script.cgi/1/script.cgi/2 为什么会发生这种情况 脚本:Perl:简单表单提交会将URL追加到当前URL,perl,cgi,Perl,Cgi,所以。我是perl新手。这个简单的脚本只需要创建一个具有指定维度的表,显示数字,就像在times表中一样。我试图通过记录路径信息来记录脚本的刷新次数,如:script.cgi/1 除非刷新,否则它会执行以下操作: script.cgi(首次使用) script.cgi/1 script.cgi/1/script.cgi/2 为什么会发生这种情况 脚本: #!/usr/bin/perl use warnings; use strict; BEGIN { $| = 1; open
#!/usr/bin/perl
use warnings;
use strict;
BEGIN {
$| = 1;
open(STDERR,">&STDOUT");
print "Content-type:text/html\n\n";
}
print "<html>\n<head>\n<title>Homework 5</title>\n</head>\n<body>\n";
print "<h1>Homework 5B</h1>\n<hr />\n";
if(defined($ENV{'CONTENT_LENGTH'}))
{
my %FORM;
my $buffer = {};
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
my @pairs = split(/&/,$buffer);
my $name=0; my $value=0;
foreach my $pair (@pairs)
{
($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
if($ENV{'CONTENT_LENGTH'}>0)
{
my @table = [];
my $var1 = $FORM{'rows'};
my $var2 = $FORM{'columns'};
if(
(!($FORM{'rows'} =~ m/[^0-9]/))
&& (!($FORM{'columns'} =~ m/[^0-9]/))
&& (!($FORM{'inc'} =~ m/[^0-9]/))
&& (!($FORM{'start'} =~ m/[^0-9]/))
)
{
my $place = $FORM{'start'};
my $i=-1;
while($i++ < $var1)
{
my $j=-1;
$table[$i] = [];
while($j++ < $var2)
{
$table[$i][$j] = $place;
$place+=$FORM{'inc'};
}
}
}
print "<table border=1>\n";
my $var =0; my $before = "<td>"; my $after = "</td>";
for(my $i=0;$i<$FORM{'rows'};$i++)
{
$var = $i+1;
print "<tr><td>Row $var:</td>\n";
for(my $j=0;$j<$FORM{'columns'};$j++)
{
my $pr = $before.($table[$i][$j]).$after;
print $pr;
}
print "</tr>\n";
}
print "</table>\n";
my $refreshed = 0;
if(defined($ENV{'PATH_INFO'}))
{
my $tmp = split(/\//,$ENV{'PATH_INFO'});
$refreshed = $tmp;
if($refreshed==1)
{
print "<p>This page was refreshed by this script one time.</p>\n";
}
elsif($refreshed>1)
{
print "<p>This page was refreshed by this script $refreshed times</p>\n";
}
}
my $path = "";
my $next = $refreshed+1;
if($next>1)
{
$path = "hw5B.cgi/".$next."/";
}
else
{
$path = "hw5B.cgi/1/";
}
print "<p>$path</p>\n";
print "<form method=\"post\" action=\"$path\">\n";
print "<span>Enter row number:<input type=\"text\" name=\"rows\" size=3 value=$FORM{'rows'} /></span><br />\n";
print "<span>Enter columns number:<input type=\"text\" name=\"columns\" size=3 value=$FORM{'columns'} /></span><br />\n";
print "<span>Enter starting number:<input type=\"text\" name=\"start\" size=3 value=$FORM{'start'} /></span><br />\n";
print "<span>Enter increment:<input type=\"text\" name=\"inc\" size=3 value=$FORM{'inc'} /></span><br />\n";
}
else
{
print "<form method=\"post\" action=\"hw5B.cgi\">\n";
print "<span>Enter row number:<input type=\"text\" name=\"rows\" size=3 /></span><br />\n";
print "<span>Enter columns number:<input type=\"text\" name=\"columns\" size=3 /></span><br />\n";
print "<span>Enter starting number:<input type=\"text\" name=\"start\" size=3 /></span><br />\n";
print "<span>Enter increment:<input type=\"text\" name=\"inc\" size=3 /></span><br />\n";
}
}
else
{
print "<form method=\"post\" action=\"hw5B.cgi\">\n";
print "<span>Enter row number:<input type=\"text\" name=\"rows\" size=3 /></span><br />\n";
print "<span>Enter columns number:<input type=\"text\" name=\"columns\" size=3 /></span><br />\n";
print "<span>Enter starting number:<input type=\"text\" name=\"start\" size=3 /></span><br />\n";
print "<span>Enter increment:<input type=\"text\" name=\"inc\" size=3 /></span><br />\n";
}
print "<input type=\"submit\" value=\"submit\" />\n";
print "</form>\n</body>\n</html>\n";
#/usr/bin/perl
使用警告;
严格使用;
开始{
$| = 1;
打开(标准字符“>”和标准字符“);
打印“内容类型:text/html\n\n”;
}
打印“\n\n家庭作业5\n\n\n”;
打印“家庭作业5B\n
\n”;
if(已定义($ENV{'CONTENT_LENGTH'}))
{
我的%表格;
我的$buffer={};
读取(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
my@pairs=split(/&/,$buffer);
我的$name=0;我的$value=0;
foreach my$pair(@pairs)
{
($name,$value)=拆分(/=/,$pair);
$FORM{$name}=$value;
}
如果($ENV{'CONTENT_LENGTH'}>0)
{
我的@table=[];
my$var1=$FORM{'rows'};
my$var2=$FORM{'columns'};
如果(
(!($FORM{'rows}=~m/[^0-9]/)
&&(!($FORM{'columns}=~m/[^0-9]/)
&&(!($FORM{'inc}=~m/[^0-9]/)
&&(!($FORM{'start}=~m/[^0-9]/)
)
{
my$place=$FORM{'start'};
我的$i=-1;
而($i++<$var1)
{
我的$j=-1;
$table[$i]=[];
而($j++<$var2)
{
$table[$i][$j]=$place;
$place+=$FORM{'inc'};
}
}
}
打印“\n”;
my$var=0;my$before=“”;my$before=“”;
对于(我的$i=0;我的$i1)
{
打印“此页面由此脚本刷新$refreshed times\n”;
}
}
我的$path=“”;
my$next=$refreshed+1;
如果($next>1)
{
$path=“hw5B.cgi/”$next./”;
}
其他的
{
$path=“hw5B.cgi/1/”;
}
打印“$path\n”;
打印“\n”;
打印“输入行号:
\n”;
打印“输入列号:
\n”;
打印“输入起始编号:
\n”;
打印“输入增量:
\n”;
}
其他的
{
打印“\n”;
打印“输入行号:
\n”;
打印“输入列号:
\n”;
打印“输入起始编号:
\n”;
打印“输入增量:
\n”;
}
}
其他的
{
打印“\n”;
打印“输入行号:
\n”;
打印“输入列号:
\n”;
打印“输入起始编号:
\n”;
打印“输入增量:
\n”;
}
打印“\n”;
打印“\n\n\n”;
您在post方法中使用了相对路径。因此,每次服务器都会附加到当前路径。您可以放置一个绝对路径,这将缓解问题,或者您可以将此计数器作为cgi参数而不是包含在路径中
<input type="hidden" name="counter" value="$counter">
此外,为了让您的生活更轻松,我建议您使用另一种双引号分隔符,这样您就不必转义html中的所有双引号:
print qq{<form method="post" action="hw5B.cgi">\n};
打印qq{\n};
第69行出现语法错误:全局符号“$tmp3”需要显式的包名。可能只希望是$tmp;2014年。为什么要使用CGI编写web应用程序?你为什么不用CGI.pm来编写CGI程序?你从哪里得到建议的?我。。。我在上一堂过时的perl实践课。我想如果我学习核心perl功能,这不会是浪费。