コンパイル済みの正規表現を動的に作成したいと思います。さて、問題はありません:動的に作成されたregexpをコンパイルする簡潔な方法
my $rx = join('|', keys %replacement_hash);
繰り返し呼び出しでオーバーヘッドを避けるためにコンパイルしたいと思います。問題ありません:
問題はありますが、これは簡単な操作では長すぎます。 2行と2つの余分な時間私は変数名に言及する必要があるので、私はそれを名前を変更することを決めた場合、私は3つの位置すべてでそれを変更する必要があります。
sub qr_expr { qr/$_[0]/ }
# and later
my $rx = qr_expr(join('|', keys %replacement_hash));
か、単に分かりやすく、私はそれを必要と同等の機能をインライン化:
これまでのところ私は(まだどこかでこの機能を維持することの欠点を持っているでしょう)ヘルパー関数を使用してのいずれかで来ています:
my $rx = sub{qr/$_[0]/}->(join('|', keys %replacement_hash));
もっと簡潔に書く方法はありますか?
[ 'map'](http://perldoc.perl.org/functions/map.html):'私の( $ rx)= map {qr/$ _ /}結合( '|'、キー%replacement_hash) ' –
@HunterMcMillen、いいです!余分なコンテキスト()arond 'my'リストが必要ない場合... –
mapはリストを返します。最初の要素(この場合は要素が1つしかない)をキャプチャしたい場合は、括弧を使用する必要があります。それ以外の場合は、リストのサイズが取得されます。 –