Perl6 搜索然后用子程序的输出替换
Posted
技术标签:
【中文标题】Perl6 搜索然后用子程序的输出替换【英文标题】:Perl6 search then replace with output of subroutine 【发布时间】:2019-09-28 08:30:49 【问题描述】:我已经梳理了文档,但似乎无法在 perl6 中找到如何做到这一点。
在 perl5 中我会这样做(只是一个例子):
sub func ...
$str =~ s/needle/func($1)/e;
即用调用 'func' 的输出替换 'needle'
【问题讨论】:
【参考方案1】:Perl 6 中没有e
修饰符;相反,右手部分被视为双引号字符串。因此,调用函数最直接的方法是在函数名前加上&
并使用函数调用插值:
# An example function
sub func($value)
$value.uc
# Substitute calling it.
my $str = "I sew with a needle.";
$str ~~ s/(needle)/&func($0)/;
say $str;
这会导致“我用针缝制。”。另请注意,在 Perl 6 中,捕获从 0 开始编号,而不是 1。如果您只想要整个捕获的字符串,请改为传递 $/
。
【讨论】:
【参考方案2】:好的,我们先创建一个函数,它只返回我们的输入重复 5 次
sub func($a) $a x 5 ;
制作我们的字符串
my $s = "Here is a needle";
这是替换
$s ~~ s/"needle"/func($/)/;
需要注意的几件事。因为我们只想匹配一个字符串,所以我们引用它。我们的输出实际上是一个双引号字符串,所以要在其中运行一个函数,我们使用。不需要
e
修饰符,因为所有字符串都允许这种转义。
The docs on substitution 提到 Match 对象放在 $/
中,所以我们将它传递给我们的函数。在这种情况下,Match 对象在转换为 String 时只返回匹配的字符串。我们得到了我们的最终结果。
Here is a needleneedleneedleneedleneedle
【讨论】:
"needle" 当然可以是一个实际的正则表达式,它也可以正常工作。 嗨,西蒙。不错的快速干净的答案。"needle"
也可以是 needle
,不带引号。为了清楚起见,您可能选择/更喜欢引用它?以上是关于Perl6 搜索然后用子程序的输出替换的主要内容,如果未能解决你的问题,请参考以下文章
用java编写一段程序,输入一段字符串,然后输出该字符串的倒序状态。