Perl String ::大约取自MySQL DataBase的值

时间:2013-07-17 16:08:56

标签: perl

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

1 个答案:

答案 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