使用字符串作为数组元素的perl数组问题

时间:2015-01-20 16:42:51

标签: arrays perl

我有以下代码。我试图在我的日志文件中找到3个单词的匹配,如果找到匹配则打印该行(仅当所有3个单词都存在时)。如果我对单词(@typedefs)进行硬编码,它可以正常工作,但如果我在带有字符串(@typedefs_new)的数组中使用相同的单词,则它不起作用。我在做什么错误?

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 个答案:

答案 0 :(得分:8)

qw()按空格分隔单词,而不是用逗号分隔单词。所以,你的代码相当于

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

warnings应该告诉你:

Possible attempt to separate words with commas