如果查询比较perl中的两个列表

时间:2014-10-30 07:02:48

标签: perl if-statement

我有2个列表,一个是文件列表,另一个是日志文件。

我希望if查询打印出日志文件的每一行,其中列出了列表中的文件。 例如:文件列表:

myfile1.txt
myfile2.txt

日志文件:

line 1   html
line 2   filename="myfile2.txt"
line 3   /html
line 4   /xml

所需的输出是:

myfile2.txt found at line 2

我尝试过多次查询,例如

if(index($Lines_Logfile[$logcounter] ,'Lines_Name[$namecounter]') != -1);

if($Lines_Logfile[$logcounter] =~ m/$Lines_Name[$namecounter]/);

其中$Lines_Logfile$Lines_Name是列表,$namecounter$logcounterfor循环的行。

1 个答案:

答案 0 :(得分:3)

您可以使用正则表达式。诀窍是认识到你需要使用quotemeta\Q...\E来逃避正则表达式特殊字符,并使用字边界\b来防止匹配子字符串。

use strict;
use warnings;
use autodie;

my @files = qw(myfile1.txt myfile2.txt);

#open my $fh, '<', 'yourfile.log';   
my $fh = \*DATA;   # Testing data used for debug purposes

while (<$fh>) {
    for my $file (@files) {
        if (/\b\Q$file\E\b/) {
            print "$file found at line $.: $_";
        }
    }
}

__DATA__
html
filename="myfile2.txt"
/html
/xml

输出:

myfile2.txt found at line 2: filename="myfile2.txt"