Perl和loopin通过并存储Form Post输入

时间:2014-01-19 17:38:35

标签: regex forms perl cgi

嗨,所以我最终要做的就是从表格中的textarea获取用户输入(方法POST)并基本上逐行读取并将行存储在一种状态变量或计数器中,直到空白命中行,并将状态变量的值作为一个元素压入数组。然后在此之后重置状态变量,并且该过程继续直到读取所有输入。从视觉上来说,这就是它应该做的事情。

用户输入示例:

要显示的一些示例用户输入

hello world lorem ipsum

  • 我希望程序读取这两行(假设它们之间没有空行)并在程序看到它们下面有一个空行时将它们推入一个数组元素。同样的事情适用于“hello world lorem ipsum”这一行。

这是我到目前为止所拥有的。我一开始尝试过一个foreach循环,但它不起作用

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $CGI = new CGI();


sub main {

print $CGI->header();

my @query = $CGI->param('query');

while(@query) {
my $line = shift(@query);
print "$line";
}
#my $count = 0;
#my @res;
#foreach my $line(@query) {
#   if($line =~ /[A-Za-z0-9]/) {
#       push(@res, $line);
#   } elsif ($line =~ /^\s$/) {
#       $count++;
#   }
#}

print<<HTML;
<html>

<head>
    <style>
        textarea {
            resize: none;
        }
    </style>
</head>

<form action="rand.cgi" method="post">
<textarea name="query"></textarea>
<input type="submit"/>
</form>

<p>Last submitted:<br><br><pre>@query</pre></p>

</html>
HTML

}

main();

1 个答案:

答案 0 :(得分:1)

不需要一堆正则表达式。你想在两个连续的换行符上split。试试这个:

use strictures;
use Data::Dump;

my $input = "some example user input to show
something with

hello world lorem ipsum";

my @foo = split /\n\n/, $input;
dd @foo;

__END__

(
  "some example user input to show\nsomething with",
  "hello world lorem ipsum",
)