ループを1回だけ実行している場合は、whileループを使用すると問題ありません。もちろん、構文を修正する必要があります。
ます。またgrep
を使用することができます。
print grep /$userInput/, <INPUT>;
あなたが複数の検索を行いたい場合は、(ファイルが大きい場合)、ファイルハンドルを再度開く、または配列に格納でき、次のいずれか
print grep /$userInput/, @array;
あなたの入力にはもちろんメタキャラクタがあります。これは、ユーザーに応じて、良いことと悪いことがあります。たとえば、経験豊富なユーザーは、^foo(?=bar)
などの検索語を入力して検索を絞り込むオプションを認識しますが、文字列foo+bar
が見つからないと他の人が非常に混乱することがあります。
メタ文字をエスケープする方法は、入力にquotemeta
を使用することです。もう一つは正規表現の中に\Q ... \E
を使うことです。
$userInput = quotemeta($userInput);
# or
print grep /\Q$userInput\E/, <INPUT>;
私があなただったら、ルックアップにサブルーチンを使用します。そうすれば、多くの検索を好きなだけ手軽に実行できます。
use strict;
use warnings; # ALWAYS use these
print "Please Enter the word to find: ";
chomp (my $userInput = <>); # <> is a more flexible handle
print lookup($userInput);
sub lookup {
my $word = shift;
open my $fh, "<", $inputfile or die $!;
my @hits;
while (<$fh>) {
push @hits, $_ if /\Q$word\E/;
}
return @hits;
}
出典
2012-03-10 18:58:10
TLP
ユーザ入力が 'dog'、あなたがしたい場合はB \
はワード境界のためである
@NewLearner(それがテストされていません。汝)うまくいくかもしれません'dogs'と' odograph'などとマッチしますか? – pilcrow
Nopファイルログで探している単語に一致させたい。 IPを入力すると、IPワードを持つ行を見つけてその行に画面に出力したいと思う。 – NewLearner
あなたはいつも 'grep word file'を実行できます。あなたが 'man grep'を読んだら、使える多くの機能があることがわかります。 – TLP