我有过
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的专家应该知道的。
(不仅有“不止一种方法可以做到”,而且有不止一种方法可以询问任何特定的事情。如果这个问题对现有的问题来说是多余的,请原谅。)
发布于 2012-05-04 12:04:03
5.14引入/r(eturn):
frobnicate( $x =~ s/ //gr =~ s/\d/9/gr );任何版本:
frobnicate apply { s/ //g; s/\d/9/g; } $x;apply来自List::MoreUtils。
发布于 2012-05-04 11:22:40
#!/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;
}https://stackoverflow.com/questions/10442196
复制相似问题