2012-05-14 70 views
0

致力於識別和調整表單內容條目。 我用grep形式被提交時在陣列以消除值:Grep並替換表單內容

# Get the input 
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 

# The following zaps entire value containing the item(s) grepped. 
    @OrigArray = split(/&/, $buffer); 
    @pairs = grep(!/kartridgeclub|bubba.org|\.ru/i, @OrigArray); 

但我更喜歡以識別不想要的字符的序列 被輸入,並且還(無論哪個被輸入之一),包括 條件語句,如果提交了任何不需要的字符序列,該條件語句將產生唯一的「返回頁面」 文本。

我不能,我認爲,使用簡單替換而不是grep,因爲 我需要替換包含不需要的字符的整個數組元素。

換句話說,用戶在表單字段中輸入垃圾箱總是包含some.org-with-ru的擴展名(或bubba.org等)。我如何識別他所輸入的grep中的短語中的哪一個?然後,將其替換爲我的 選項(而不是將其從數組中刪除)併爲此用戶生成不同的 「謝謝」頁面?

謝謝。

+4

難道你沒有使用像CGI這樣的模塊來處理表單輸入嗎? – Cfreak

+0

2012年5月15日,星期二......非常感謝所有已回答的人。一個奇怪的服務器問題正在阻止我前進,但我想感謝您的所有幫助和建議。 –

回答

0

只是不要使用grep。使用好的舊for循環並編寫一些代碼。

for my $i (0 .. $#OrigArray) { 
    my $pair = $OrigArray[$i]; 
    if ($pair =~ m/whatever/) { 
     # you're welcome to change $OrigArray[$i] here 
    } 
} 
1

Cfreak的問題是務實:使用CGI處理表單的輸入。使用CGI的param函數,檢查表單的「不需要的字符序列」的參數,然後根據你發現的內容進行相應的修改和/或分支。例如:

use strict; 
use warnings; 
use CGI qw(:standard); 
use 5.010; 

my $input_field = param('input_field'); 

given(lc $input_field) { 
    when(/kartridgeclub/) { 
     print 'kartridgeclub'; 
     # do something else 
    } 
    when(/bubba\.org\b/) { 
     print 'bubba.org'; 
     # do something else 
    } 
    when(/\.ru\b/) { 
     print '.ru'; 
     # do something else 
    } 
    when(/this|that/) { 
     print 'this or that'; 
     # do something else 
    } 
    default { 
     print 'Your entry seems OK.'; 
     # do something else 
    } 
} 
1

,而我與其他博文,你最好使用這個CGI完全同意,我覺得這行應達到你想要什麼。

my %pairs = map { $_ => ($_ =~ /kartridgeclub|bubba.org|\.ru/i ? 'invalid' : 'valid')} @orig_array;