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

Другими словами, пользователь вводит расширение bunch-of-garbage-always-contains-some.org-with-ru (или bubba.org и т. Д.) В поле формы. Как определить, какие из фраз в grep он ввел? И затем замените его фразой моего (вместо того, чтобы просто удалять его из массива) и создать другую страницу «Спасибо» для «Thank You» для этого пользователя?

Спасибо.

+4

Есть ли причина, по которой вы не используете модуль, например 'CGI', для обработки ввода формы? – Cfreak

+0

Вт, 15 мая 2012 г. ... Большое спасибо всем, кто ответил. Странная проблема с сервером мешает мне идти вперед только сейчас, но я хочу поблагодарить вас за вашу помощь и советы. –

ответ

0

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

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, исследуйте параметры своей формы для «нежелательных последовательностей символов», а затем вносите изменения и/или ветви соответственно - основываясь на том, что вы нашли. Например:

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;