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 の各要素を 2 番目のパラメーターとして受け取り、最初のパラメーターが true か false かをチェックします。あなたの場合、$match常に「a」になるため、常にtrueになります。これを試して:

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 に答える