0

当我将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/>" }
4

1 回答 1

0

正如理查德所说,这条线是不必要的:-

@name="(['$y'])";

您可以按原样编写 $y ,而 perl 会做正确的事情。

后面跟着 if 的 grep 是相同工作的重复。amatch 在标量上下文中返回真/假,因此我们可以使用它。

您可以按照以下方式简化代码:-

  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
于 2013-07-18T06:18:05.387 回答