使用String :: Substitution匹配零

时间:2015-04-23 18:15:05

标签: perl

我正在尝试将数字与String::Substitution匹配;如果数字不为零,它可以正常工作。如果数字为零,则替换空字符串而不是数字。例如:

use strict;
use warnings;

use Data::Dump;
use String::Substitution;

my @data = qw(0 1);
for (@data) {
    my $str = $_;
    my $regex = qr/(\d)/;
    my $replace = '$1';
    my $result_str = String::Substitution::gsub_copy($str, $regex, $replace);
    my @m = $str =~ /$regex/g;
    dd $result_str;
    dd @m;
}

输出结果为:

""
0
1
1

预期产出将是:

0
0
1
1

1 个答案:

答案 0 :(得分:1)

为了避免“未初始化”警告,模块版本1.001尝试将未定义的占位符转换为空字符串。但是,它错误地使用真值测试而不是定义的测试来确定用空字符串替换哪些值。

map { ($$_) || '' } ( 1 .. $#- )

该代码需要更改为

map { defined($$_) ? $$_ : '' } ( 1 .. $#- )

错误报告已submitted