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, так как мне нужно заменить весь элемент массива, содержащий нежелательные символы.

Другими словами, пользователь вводит в поле формы расширение «куча-мусора-всегда-содержащий-какой-то.org-с-ru» (или bubba.org и т.п.). Как мне определить, какую из фраз в grep он ввел? А затем заменить его фразой по моему выбору (вместо того, чтобы просто удалить ее из массива) и создать другую страницу «Спасибо» для этого пользователя?

Спасибо.


person Jamms S    schedule 14.05.2012    source источник
comment
Есть ли причина, по которой вы не используете такой модуль, как CGI, для обработки ввода формы?   -  person Cfreak    schedule 14.05.2012
comment
Вт, 15 мая 2012 г.... Большое спасибо всем, кто ответил. Странная проблема с сервером мешает мне двигаться дальше, но я хочу поблагодарить вас за всю вашу помощь и советы.   -  person Jamms S    schedule 15.05.2012


Ответы (3)


Вопрос 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
    }
}
person Kenosis    schedule 14.05.2012

хотя я полностью согласен с другими сообщениями о том, что для этого лучше использовать CGI, я думаю, что эта строка должна достичь того, чего вы хотите.

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

Только не используйте grep. Используйте старые добрые циклы for и напишите код.

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