致力于识别和调整表单内容条目。 我在提交表单时使用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中的短语?然后,用我的短语替换它 选择(而不是仅仅从数组中删除它)并产生不同的 这个用户的“谢谢”页面?
感谢。
答案 0 :(得分: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 :(得分:1)
虽然我完全同意其他帖子,你最好使用CGI,我认为这条线应该达到你想要的效果。
my %pairs = map { $_ => ($_ =~ /kartridgeclub|bubba.org|\.ru/i ? 'invalid' : 'valid')} @orig_array;
答案 2 :(得分:0)
只是不要使用grep。使用好的旧for循环并编写一些代码。
for my $i (0 .. $#OrigArray) {
my $pair = $OrigArray[$i];
if ($pair =~ m/whatever/) {
# you're welcome to change $OrigArray[$i] here
}
}