2015-04-23 29 views
2

我試圖匹配一個數字與String::Substitution;如果數字不爲零,它工作正常。如果數字爲零,則替換空字符串而不是數字。例如:匹配零與字符串:: 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 
+0

一些奇怪的事情正在發生。試圖找出什麼 – ikegami

+1

@ikegami我認爲在源代碼https://metacpan.org/source/RWSTAUNER/String-Substitution-1.001/lib/String/Substitution.pm中存在#95行的錯誤。應該是'map {($$ _)//''}(1.. $# - )'注意定義或者'//'不是常規或者'||'如源代碼那樣。 –

+1

是的,這就是問題。 – ikegami

回答

1

爲了避免 「未初始化」 的警告,該模塊的1.001版本試圖未定義佔位符轉換成空弦。然而,它錯誤地使用真值測試而不是定義的測試來確定用空字符串替換哪些值。

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

代碼需要改爲

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

的bug報告已經submitted