首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将perl正则表达式替换作为表达式中的函数编写?

如何将perl正则表达式替换作为表达式中的函数编写?
EN

Stack Overflow用户
提问于 2012-05-04 11:10:57
回答 2查看 136关注 0票数 2

我有过

代码语言:javascript
复制
my $x = "whatever 123";
$x =~ s/ //g;
$x =~ s/\d/9/g;
frobnicate($x);

尽管在现实生活中,它要复杂得多,也更大。我想做的是以函数形式执行替换,如下所示:

代码语言:javascript
复制
my $x = "whatever 123";
frobnicate(   regex_substitutions($x, s/ //g, s/\d/9/g) );

这看起来像是可读性的倒退,但在现实生活中,这样的事情实际上会有所帮助。其目标是避免在单独的语句中使用正则表达式替换,而是将其合并到表达式中。我猜有一种巧妙且易读的方法可以做到这一点,这是长期使用perl的专家应该知道的。

(不仅有“不止一种方法可以做到”,而且有不止一种方法可以询问任何特定的事情。如果这个问题对现有的问题来说是多余的,请原谅。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-04 12:04:03

5.14引入/r(eturn):

代码语言:javascript
复制
frobnicate( $x =~ s/ //gr =~ s/\d/9/gr );

任何版本:

代码语言:javascript
复制
frobnicate apply { s/ //g; s/\d/9/g; } $x;

apply来自List::MoreUtils

票数 7
EN

Stack Overflow用户

发布于 2012-05-04 11:22:40

代码语言:javascript
复制
#!/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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10442196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档