2

私は持っています

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) );

これは読みやすさの一歩後退のように見えるかもしれませんが、実際にはこのようなものが実際に役立ちます。目標は、個別のステートメントに正規表現の置換が含まれないようにすることですが、式に組み込まれます。長年のperlの専門家が知っている、これを行うための巧妙で読みやすい方法があると思います。

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

4

2 に答える 2

7

5.14 で導入された /r(return):

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

任意のバージョン:

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

applyList::MoreUtilsから来ます。

于 2012-05-04T04:04:02.940 に答える
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;
}
于 2012-05-04T03:22:40.233 に答える