我正在解析一个非常简单的文本文件并将其操作为一个数组。在我的程序的最后一步,我试图搜索用户给定的术语。我已经尝试了很多东西,但似乎无法让它工作,我搜索一个我知道的事实是在数组中它仍然没有找到它。我有一种预感,变量可能会在" 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;它会打印出未找到的内容。请帮助!!
答案 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
是显示任何数据(结构与否)的绝佳模块。