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

您还应该使用 3 参数版本的 open。

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 回答