2012-05-04 3 views
2

実際の生活の中で、それははるかにメシエと大きいですが、私は式の関数としてperl正規表現置換を書くには?

my $x = "whatever 123"; 
$x =~ s/ //g; 
$x =~ s/\d/9/g; 
frobnicate($x); 

を持っています。読みやすさで一歩後退のように見えるかもしれ

my $x = "whatever 123"; 
frobnicate( regex_substitutions($x, s/ //g, s/\d/9/g)); 

を、実際に役立つだろう。このような現実の何かに:私は何をしたいのは、このように、機能的な形でsubstitionsを行うことです。正規表現の置き換えを別々の文で行うのを避けることを目標にしていますが、式に組み込んでいます。私は、これを行うための滑らかで読みやすい方法があると推測しています。

(だけでなく、「それを行うには複数の方法」があるが、いずれかの特定の事柄について質問する複数の方法があります。この質問は、既存のものと重複している場合は、私を許してください。)

答えて

7

5.14導入/ R(ETURN):

frobnicate($x =~ s/ //gr =~ s/\d/9/gr); 

任意のバージョン:

frobnicate apply { s/ //g; s/\d/9/g; } $x; 

applyList::MoreUtilsに由来します。

1
#!/usr/bin/env perl 

use strict; use warnings; 

my $x = "whatever 123"; 

frobnicate(regex_substitutions($x => 
    sub { s/ //g for @_;() }, 
    sub { s/\d/9/g for @_; @_ }, 
)); 

sub frobnicate { print "@_\n" } 

sub regex_substitutions { 
    my ($x, @c) = @_; 
    return map $_->($x), @c; 
}