在Perl中使用grep和gawk

hut*_*rca 1 formatting perl awk grep cgi

    $chosenbeer = param('beers');
    $beerprice = `grep "$chosenbeer" beers | gawk '{gsub(/[a-zA-Z\t ]/,"");print $1}'`;
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试使用的代码,$ chosenbeer是以前来自CGI页面的列表的字符串.我正试图让啤酒的价格被选中.

啤酒出线:

Dogfish Head 60 Minute IPA      35.96
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这是行不通的.知道为什么吗?当我打印$ beerprice时,没有任何结果.

Sch*_*ern 9

您可以在Perl中更好地完成此操作而不会出现问题.应该更快,更灵活,更便携,更容易调试,并且不包含大的安全漏洞.

sub find_beer {
    my $beer = shift;

    open my $fh, "beers" or die $!;

    # Take the first beer that matches
    my($line) = grep /\Q$beer/, <$fh>;
    return unless $line;

    # I'm presuming the name and price are separated by a hard tab.
    my($name, $price) = split /\t/, $line;

    return { name => $name, price => $price };
}

my $beer = find_beer("Dogfish Head 60 Minute IPA");
print $beer->{price}, "\n";
Run Code Online (Sandbox Code Playgroud)