0

致力于识别和调整表单内容条目。提交表单时,我正在使用 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,因为我需要替换包含不需要的字符的整个数组元素。

换句话说,用户在表单字段中输入了一堆垃圾总是包含一些.org-with-ru 扩展名(或 bubba.org 等)。我如何识别他输入的 grep 中的哪些短语?然后,用我选择的短语替换它(而不是仅仅从数组中删除它)并为该用户生成不同的“谢谢”页面?

谢谢。

4

3 回答 3

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
    }
}
于 2012-05-14T18:58:24.380 回答
1

虽然我完全同意您最好使用 CGI 的其他帖子,但我认为这条线应该可以实现您想要的。

my %pairs = map { $_ => ($_ =~ /kartridgeclub|bubba.org|\.ru/i ? 'invalid' : 'valid')} @orig_array;
于 2012-05-15T05:30:26.390 回答
0

只是不要使用 grep。使用良好的旧 for 循环并编写一些代码。

for my $i (0 .. $#OrigArray) {
    my $pair = $OrigArray[$i];
    if ($pair =~ m/whatever/) {
        # you're welcome to change $OrigArray[$i] here
    }
}
于 2012-05-14T16:09:37.250 回答