1

我正在解析一个非常简单的文本文件并将其处理成一个数组。在程序的最后一步中,我试图搜索用户给定的术语。我已经尝试了很多东西,但似乎无法让它发挥作用,我搜索了一个我知道的术语,因为事实在数组中它仍然找不到它。我有一种预感,变量可能会在“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";
}

所以我知道“苹果”这个词在列表中,当我搜索“苹果”这个词时,它会打印出它没有找到。请帮忙!!

4

2 回答 2

5

你应该试试

chomp(my $element = <STDIN>);

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

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

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

/\Q$element\E/
于 2012-12-11T20:29:57.290 回答
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(),你正在尝试 grepelement\n而不是element
  • Data::Dumper是显示任何数据(结构与否)的绝佳模块。
于 2012-12-11T20:35:21.973 回答