Simple Perl:无法将数组元素与字符串进行比较

时间:2014-04-19 04:57:28

标签: arrays regex perl

我最初编写了一个脚本,用于将单词列表(每行只有1个单词)转换为单词@keywords(每行一个元素)的数组:

-------------------

    open (FH, "< $keyword_file") or die "Can't open $keyword_file for read: $!";
    my @keywords;
    while (<FH>) {
        push (@keywords, $_);
    }
    close FH or die "Cannot close $keyword_file: $!";

--------------------

我现在正在尝试使用正则表达式将其与其他字符串进行比较,但由于某种原因我只是一直得到错误的结果?

-----------------------

FULL PROGRAM
    -----------------------------------
    #!/usr/bin/env perl 

use strict;
use warnings;
use Data::Dumper;



print "\n[Keywords]";

my $keyword_file = "keywords.txt";

#read keywords
my @keywords;

open (FH, "$keyword_file") or die "Can't open $keyword_file for read: $!";

while (<FH>) {
    chomp;
    push (@keywords, $_);
}
close FH or die "Cannot close $keyword_file: $!";


#pattern match


foreach(@keywords)
{

   if ("print" =~ m/$_/) {
        print "match found\n";
    }

}


    ----------------------------------

上述参数应该是真的,但它只是保持返回false。我究竟做错了什么?这是因为数组也存储了nextlines(输入)(抱歉,如果我认为这听起来很无知:p)?

2 个答案:

答案 0 :(得分:0)

是的,你需要chomp你的数组来删除行结尾:

chomp(@keywords);

答案 1 :(得分:0)

您忘记删除关键字中的换行符,请尝试以下操作:

while (<FH>) {
    chomp;
    push (@keywords, $_);
}

这是一个测试程序:

#!/usr/bin/perl

use strict;
use warnings;

my @keyword;
while (<DATA>) {
    chomp;
    push @keyword, $_;
}

foreach (@keyword) {
    if ("print exit write" =~ m/$_/) {
        print "match found\n";
    }
}

__DATA__
print
exit
write