2014-01-19 54 views
1

嗨,所以我最終要做的是從窗體(方法POST)中的textarea獲取用戶輸入,並基本上逐行閱讀並將行存儲在一種狀態變量或計數器,直到空行被命中並且狀態變量的值作爲一個元素被壓入一個數組。在此之後,狀態變量被重置,並且該過程繼續直到所有輸入被讀取。在視覺上,這是它應該做的。用戶輸入的Perl和循環和存儲Form Post輸入

例子:

一些例如用戶輸入顯示

一些與

的hello world Lorem存有

  • 我希望程序讀取這些兩個第一線(假設它們之間沒有空行),並在程序看到它們下面有空行時將它們推入一個數組元素。同樣的事情適用於「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

沒有必要對一羣正則表達式的。您需要連續兩次換行符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", 
) 
+0

我感謝你的幫助,但我實際上需要程序來分割$輸入時,它看到一個空行。此外,出於某種原因,「有東西」被切斷,而不是任何數組元素。 – John

+0

擺脫'\ r'並轉到'/ \ n \ n /'。空行只不過是換行符,後面跟着另一個換行符。 – simbabque

+0

你是男人謝謝你。我完全想到這個哈哈。 – John