在数组中搜索术语

时间:2012-12-11 20:25:13

标签: arrays perl parsing search grep

我正在解析一个非常简单的文本文件并将其操作为一个数组。在我的程序的最后一步,我试图搜索用户给定的术语。我已经尝试了很多东西,但似乎无法让它工作,我搜索一个我知道的事实是在数组中它仍然没有找到它。我有一种预感,变量可能会在" split"," chop"和" sort"期间被修改。功能,但我不完全确定。

print "\n";
print "Enter a term you would like to search for: \n";

my $element = <STDIN>;

$num = grep(/$element/,@final);

if($num > 0){
print ("Term: " . $element . " found " . $num . " times. \n");
}else{
print "Not found. \n";
}

所以我知道“&#34; apple&#34;当我搜索术语&#34; apple&#34;它会打印出未找到的内容。请帮助!!

2 个答案:

答案 0 :(得分:5)

你应该试试

chomp(my $element = <STDIN>);

因为您的标准输入会有一个尾随换行符,否则会在搜索中匹配。 E.g:

$element = "foo\n";   
grep /$element/, "foo bar";  # will not match

您还应该知道元字符将在您的输入中被解释。因此,例如,foo?将被视为“后跟可选的o”。为避免这种情况,您可以使用quotemeta\Q ... \E,例如在你的正则表达式使用:

/\Q$element\E/

答案 1 :(得分:0)

尝试这样做:

use Data::Dumper;

my @final = <DATA>;
chomp(@final);
print Dumper \@final;

print "Enter a term you would like to search for >>> ";
chomp(my $element = <STDIN>);

$num = grep { /$element/ } @final;

if ($num > 0){
    print("Term: $element found $num times\n");
}
else{
    print("Not found. \n");
}


__DATA__
foo
bar
base

注意

  • 如果您没有chomp(),那么您正试图element\n而不是element
  • Data::Dumper是显示任何数据(结构与否)的绝佳模块。