以下 Perl 代码在第二次尝试取消引用捕获组“ext”时失败
use strict;
use warnings;
foreach(qw/2.1 2/){
#foreach(@ARGV){
my $out= sprintf("%.2f", $_);
$out =~ s/(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)/$+{'ext'}/g;
print ":".$out.":\n";
}
Run Code Online (Sandbox Code Playgroud)
如果未定义替换字符串中的捕获组,如何设置默认值?
我确信还有其他几种方法可以解决这个问题,但我相信无法为捕获组设置默认值肯定会再次出现 - 所以请帮我解决这个问题。
跟进:
..我在池上建议的帮助下让它工作,所以它读
$out =~ s{(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)}{ $+{'ext'} // "" }eg;
Run Code Online (Sandbox Code Playgroud)
……难道就没有别的办法了吗?特别是因为这只适用于 Perl 的“e”评估正则表达式功能。这也必须以标准正则表达式的方式出现,如果一开始就没有捕获的话,至少要忽略捕获组解除引用,不是吗?