我最初编写了一个脚本,用于将单词列表(每行只有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)?
答案 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