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 の代わりに単純な置換を使用することはできないと思います。

つまり、ユーザーは、bunk-of-garbage-always-containing-some.org-with-ru 拡張子 (または bubba.org など) をフォーム フィールドに入力します。彼が入力した grep のフレーズを特定するにはどうすればよいですか? そして、それを (単に配列から削除するのではなく) 選択したフレーズに置き換えて、このユーザーに別の「ありがとう」ページを作成しますか?

ありがとう。

4

3 に答える 3

1

これにはCGIを使用したほうがよいという他の投稿には完全に同意しますが、この行はあなたが望むものを達成するはずだと思います。

my %pairs = map { $_ => ($_ =~ /kartridgeclub|bubba.org|\.ru/i ? 'invalid' : 'valid')} @orig_array;
于 2012-05-15T05:30:26.390 に答える
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 に答える
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 に答える