以下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";
}
如果未定义,我如何在替换字符串中设置捕获组的默认值?
我相信有几种解决此问题的其他方法,但是不能为捕获组设置默认值肯定会再次出现 - 所以请帮我解决这个问题。
后续:
..在ikegami的建议下,我已经成功使其工作,所以它的读法是:
$out =~ s{(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)}{ $+{'ext'} // "" }eg;
...还有其他办法吗? 尤其是因为这只适用于Perl的“e”正则表达式功能。 标准的正则表达式方式应该也会提到这一点,至少在第一次未捕获时忽略捕获组解引用,不是吗?
e
就是用来运行代码生成替换结果的方式。 - ikegamie
就是用来运行代码生成替换结果的方式。 - ikegamie
就是你运行代码生成替换结果的方式。 - undefined