3

我有以下脚本:

 use strict;
 use warnings;

 my @test = ("a", "b", "c", "a", "ca");
 my @res = grep(m#a#, @test);

 print (join(", ", @res)."\n");

它应该只返回包含a. 它完美地工作。

问题是我需要能够动态地获取这些字符串。我尝试了以下方法:

 use strict;
 use warnings;

 my $match = "a";
 my @test = ("a", "b", "c", "a", "ca");
 my @res = grep($match, @test);

 print (join(", ", @res)."\n");

结果是:

a, b, c, a, ca

我应该怎么做才能对grep带有动态变量的数组进行处理?

4

2 回答 2

11

grep将您提供的 LIST 中的每个元素作为第二个参数,并检查第一个参数是真还是假。在你的情况下,$match永远是真的,因为它永远是“a”。尝试这个:

my @res = grep( m/$match/, @test);

如果您的动态字符串可以包含的不仅仅是字母数字字符,您还应该引用它:

my @res = grep( m/\Q$match/, @test);
于 2013-06-30T14:11:30.137 回答
4

我想你想要:

my @res = grep { $_ =~ $match } @test;
于 2013-06-30T14:11:05.177 回答