0

私はちょうど perl を学んでいて、同時に正規表現を学ぼうとしています。基本的に、ログファイルを開いて、ユーザー入力に一致する行を新しいファイルに出力しようとしています。次のコードを使用すると、「Clinton」という単語を入力しても何も出力されません。でも交換したら

print MYFILE if /\$string\;

print MYFILE if /\Clinton\; 

期待どおりに実行されます。何か案は?私が見逃しているのは単純なことだと知っています。

print "Enter a word to look up: ";
$string = <>;
print "You put $string";
open(LOG,"u_ex121011.log") or die "Unable to open logfile:$!\n";
open (MYFILE, '>>data2.txt');
while(<LOG>){   
   print MYFILE if /\Q($string)\E/;
}
close (MYFILE); 
close(LOG);
print "Check data2.txt";
4

3 に答える 3

4

Perl では、一部の言語とは異なり、入力演算子は末尾の改行を黙って削除しません。だからあなた$stringは実際に"Clinton\n"はではなく"Clinton". それを修正するには、次の関数を使用chompます。

$string = <>;
chomp $string;
print "You put $string\n";
于 2012-10-24T15:10:31.017 に答える
0

open の 3 引数バージョンも使用する必要があります。

open( my $LOG, '<', 'u_ex121011.log' ) or die "Unable to open file:$!\n";

http://perldoc.perl.org/functions/open.htmlを開く

于 2012-10-24T15:13:02.037 に答える
-1

ruakhが言ったことに加えて、$_変数と=~演算子を使用して、文字列が行にあるかどうかを確認する必要があります。

print MYFILE "$_\n" if $_ =~ /\Q$string\E/;

あなたのコメントから外れて、驚くべきことに、 を使用してラインを十分に分割できますsplit。これはあなたができることの例です:

my @lines = split( ' ', $_ );
print MYFILE "$lines[0] $lines[1] $lines[2] $lines[3]\n";

ここに分割のドキュメントがあります: http://perldoc.perl.org/functions/split.html

于 2012-10-24T15:14:37.157 に答える