2015-01-20 2 views
0

아래 코드가 있습니다. 내 로그 파일에서 3 단어의 일치 항목을 찾고 일치 항목이 발견되면 줄을 인쇄하려고합니다 (모든 3 단어가있는 경우에만). 단어 (@typedefs)를 하드 코딩하면 제대로 작동하지만 문자열이있는 배열에 동일한 단어가있는 경우 작동하지 않습니다 (@typedefs_new). 내가하고있는 실수는 무엇입니까?배열 요소로 문자열을 사용할 때 perl 배열 문제가 발생했습니다.

my $str1="laa"; 
my $str2="faa"; 
my $str3="baa"; 

my @typedefs = qw(laa,faa,baa); 
my @typedefs_new = ($str1,$str2,$str3); 

my $file="/pathtofile/logfile.log"; 
open (FILE, $file) or die $!; 

print "Output using typdefs_new array\n"; 
while (my $line = <FILE>) { 
if (any { $line =~ /$_/ } @typedefs_new) { 
    print $line; 
    } 
} 

print "Output using typdefs array\n"; 
while (my $line = <FILE>) { 
if (any { $line =~ /$_/ } @typedefs) { 
    print $line; 
    } 
} 

있는 logfile.log :

laa ferg gerg faa rgrebf baa abc def 
fber rgreg rgre greg bgbg rghgr grhr 

출력 :

Output using typedefs_new array 
laa ferg gerg faa rgrebf baa abc def 
fber rgreg rgre greg bgbg rghgr grhr 

Output using typedefs array 
laa ferg gerg faa rgrebf baa abc def 
+1

[choroba 지적 (http://stackoverflow.com/a/28050781/176646) 당신이있는 이유 다른 배열에 대해 다른 결과를 얻지 만 세 키워드를 모두 포함하는 행만 일치 시키려면'any'가 아닌'all'을 사용해야합니다. '/ \ b $ _ \ b /'와 같이 정규 표현식을 변경하여 'blaa'와 'faaa'와 같은 단어가 일치하지 않도록해야합니다. – ThisSuitIsBlackNot

답변

8

qw()이 아닌 쉼표, 공백으로 단어를 구분합니다. 당신에게 말 했어야 그래서, 코드가

my @typedefs = ('laa,faa,baa'); 

warnings에 해당된다

Possible attempt to separate words with commas 
+2

이것이 실제로 사용하는 코드라면 그들이 말하는 결과를 얻지 못했을 것입니다 – ysth

관련 문제