当我将String::Approx应用于从数据库中获取的值时,它不会检查匹配的单词。
该计划如下......
use String::Approx qw (amatch);
my @matches = qw();
my %matchhash = qw();
my @x=$search_keyword;
my $i=0;
my $j=0;
my $l=1;
my $qry1="SELECT * FROM AuctionCategoriesName";
my $prp1 = $dbh1->prepare($qry1);
$prp1->execute();
while(my $row1=$prp1->fetchrow_hashref())
{
$y=$row1->{'Name'};
@name="(['$y'])";
@match = grep { amatch (@x, @$_) } @name;
$cnt=$#match;
if($cnt < 1)
{
$matches[$i]=$match[0];
$i++;
}
}
与db的连接非常完美。
我想从db中获取与$row1->{'Name'}
中存在的所有值大致匹配的名称。值必须保存在$matches[$i]
中。我将这些值称为:
foreach my $k (@matches) { print "$k <br/>" }
答案 0 :(得分:0)
正如理查德所说,这条线是不必要的: -
@name="(['$y'])";
您可以按原样编写$ y,perl会做正确的事。
后跟if的grep是同一工作的重复。 amatch在标量上下文中返回true / false,因此我们可以使用它。
您可以按以下方式简化代码: -
1 use String::Approx qw (amatch);
2 use strict;
3 my @matches = qw();
4 my $search_keyword = 'Hello';
5 foreach my $y ('hello', 'world')
6 {
7 if (amatch ($search_keyword, ($y)))
8 {
9 push @matches, $y;
10 }
11 }
12
13 print @matches
输出结果为: -
$ perl test.pl
hello