2013-06-30 1 views
3

나는 다음과 같은 스크립트가 : 그것은 a를 포함하는 경우에만 문자열을 반환하기로GREP 주어진 문자열을 포함하는 모든 문자열을 얻을

use strict; 
use warnings; 

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

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

합니다. 그것은 완벽하게 작동합니다.

문제는이 문자열을 동적으로 가져올 수 있어야한다는 것입니다.

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, 캘리포니아

나는 grep 배열과 함께 할 수 있도록 무엇을해야 역동적 인 변수?

답변

11

grep는 첫 번째 매개 변수가 true인지 거짓인지 두 번째 매개 변수와 검사로 제공하는 목록의 각 요소를합니다. 귀하의 경우 $match은 항상 "a"가 될 것이므로 항상 true가됩니다. 이 시도 : 동적 문자열은 단지 문자 숫자 이상을 포함 할 경우

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

, 당신은 또한 그것을 인용한다 :

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

난 당신이 원하는 생각 :

my @res = grep { $_ =~ $match } @test;