我只是在学习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";
答案 0 :(得分:3)
在Perl中,与某些语言不同,输入操作符不会以静默方式删除尾随换行符。因此,$string
实际上是"Clinton\n"
而不是"Clinton"
。要解决此问题,请使用the chomp
function:
$string = <>;
chomp $string;
print "You put $string\n";
答案 1 :(得分:0)
您还应该使用open的3参数版本。
open( my $LOG, '<', 'u_ex121011.log' ) or die "Unable to open file:$!\n";
答案 2 :(得分:-1)
除了ruakh所说的,你应该使用$_
变量和=~
运算符检查字符串是否在线上。
print MYFILE "$_\n" if $_ =~ /\Q$string\E/;
关闭评论,您可以使用split
令人惊讶地分割线条。
以下是您可以做的一个示例:
my @lines = split( ' ', $_ );
print MYFILE "$lines[0] $lines[1] $lines[2] $lines[3]\n";