2012-05-14 32 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;