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