2013-06-30 144 views
3

我有以下脚本:GREP获得包含特定字符串的所有字符串

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的阵列一个动态变量?

回答

11

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

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

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

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

我想你想:

my @res = grep { $_ =~ $match } @test; 
相关问题