所以我编写了一个perl脚本来传递HTML文件中的参数,然后获取参数的vaule并将其写入文件,然后读取文件并编译数据。这是html文件的正文:
<!DOCTYPE html>
<!DOCTYPE html>
<html lang = "en">
<head>
<title> poll.html </title>
<meta charset = "utf-8" />
<style type = "text/css">
</style>
</head>
<!-- the quiz -->
<body>
<form action = "../cgi-bin/poll.pl" method = "post">
</h1> this is a poll<br><br>What is your favorite color?</h1>
<input type="radio" name="color" value="red">Red<br>
<input type="radio" name="color" value="green">Green<br>
<input type="radio" name="color" value="blue">Blue<br>
<input type = "submit" value = "Submit Quiz" />
</form>
</body>
</html>
然后我有我的perl脚本一切正常但是一旦我打开我的文件我失去了$ color的值我尝试使$ color成为全局可变量但是同样的错误发生了(在连接中使用未初始化的值$ color(。)或者在poll.pl第19行的字符串。)这里是perl脚本: #!/ usr / bin / perl -w
# processOrder.pl
use CGI ":standard";
use strict;
use warnings;
print header;
print start_html("Pizza Places Order Form");
#Set local variables to the parameter values
our($color)=param("color");
my $filename = 'data.txt';
open(my $fh, '+>>', $filename) or die "Could not open file '$filename' $!";
print $fh "'$color'\n";
my $red = 0;
my $blue = 0;
my $green = 0;
while( my $line = <$fh>) {
if (index($line, "red\n") != -1) {
$blue = $blue + 1;}
if (index($line, "blue\n") != -1) {
$blue = $blue + 1;}
if (index($line, "gren\n") != -1) {
$green = $green + 1;}
}
my $total = $red + $green +$blue;
if ($total == 0){
$total = 1}
print h4("percent blue = ", $blue/$total, "\n");
print h4("percent green = ", $green/$total, "\n");
print h4("percent red = ", $red/$total, "\n");
close $fh;
最后警告我是perl的新手,但我确实认为这个逻辑是合理的,任何帮助都会很棒。谢谢
答案 0 :(得分:0)
您的脚本存在许多问题。以下是三个主要的:
seek $fh, 0, 0;
'blue'
附加到该文件,但您将其与blue
进行比较(您错过了单引号)。你永远不会得到任何比赛。red\n
匹配,如果匹配,则会增加$blue
。答案 1 :(得分:0)
我知道这是一个较旧的线程,但我注意到的一件事是你没有使用chomp。当您从stdin(或从表单或其他)读取并想要将其与字符串进行比较时,最好先选择($ var)来删除换行符。如果没有换行符,那么该函数什么都不做(与chop()不同,它会删除最后一个字符而不管它是什么。)
所以这个:
if (index($line, "red\n") != -1) {
会变成这样:
if (index(chomp($line), "red") != -1) {
这不是什么大不了的事,但如果您不确定是否有新行,那么这是一个很好的做法。如果您正在读取的字符串位于文件末尾并且不存在换行符,则尤其如此,这在* nix环境中至少相当常见。