使用 perl 处理脚本创建注释框 html 表单



我目前有一个名为"test.pl"的脚本,它可以执行各种操作并打印出HTML代码以在网页上查看。我希望它做的一件事是允许用户输入注释,并选择注释的类型,注释框的处理形式会将注释附加到文件中。我不确定我是否这样做是正确的,因为它似乎不起作用,因为我遇到了一些错误。以下是代码片段:

#!/usr/bin/perl
use warnings;
use CGI qw(:cgi-lib :standard);  # Use CGI modules that let people read data passed from a form
#Initiate comment processing
&ReadParse(%in);
if ($in("comment") && $in("type") ! == "") {
    $comment = $in("comment");
    $type = $in("type");
    WritetoFile($comment,$type);
}
sub WritetoFile {
    my $input = shift;
    my $type = shift;
    my $file = "$type" . "_comment.txt";
    open (my $fh, '>>', $file) or die "Could not open file '$file' $!";
    print $fh "$inputn";
    close $fh
}   

我使用的形式是这样的:

<FORM ACTION=test.pl METHOD=POST>
Comment:
<INPUT TYPE=TEXT NAME="comment" LENGTH=60>
<P>
Select Type
<SELECT NAME ="type">
<OPTION SELECTED> Animal
<OPTION> Fruit
<OPTION> Vegetable
<OPTION> Meat
<OPTION> Other
<INPUT TYPE=SUBMIT VALUE="Submit"></FORM

关于如何使这项工作甚至改进我正在做的流程的任何建议将不胜感激!我宁愿将处理脚本和执行其余订阅的脚本保留为相同的脚本(test.pl),除非这是我必须分开保存的内容

你的代码是旧式和新式Perl的奇怪混合体。你在 CGI.pm 中使用 cgi-lib 兼容层,并使用(自 1994 年以来不必要的)前导 & 符号调用其 ReadParse() 函数。另一方面,你使用的是三参数 open() 和词法文件句柄。我很想听听你是如何发展这种风格的。

您的问题来自您对 %in 哈希的(错误)处理。您对 ReadParse() 的调用将所有 CGI 参数放入哈希中,但您使用了错误的语法从哈希中获取值。哈希键是用大括号({ ... })而不是括号(( ... ))查找的。

您对布尔相等运算符也有一些困惑。 !=用于数值比较。您希望ne进行字符串比较。

您可能想要这样的东西:

ReadParse(%in);
if ($in{comment} ne "" and $in{type} ne "") {
    $comment = $in{comment};
    $type = $in{type};
    WritetoFile($comment,$type);
}

$comment变量和$type变量是不必要的,因为您可以将哈希查找直接传递到子例程中。

WritetoFile($in{comment}, $in{type});

最后,正如其他人指出的那样,在2014年学习CGI就像学习使用打字机一样 - 它仍然可以工作,但人们会认为你相当过时。看看CGI::一些更现代的方法的替代品。

最新更新