use strict;
use warnings;
use feature qw/say/ ;
#方式1
my $str = "INIT, ,, ," ;
$str =~ s/\s+//g ;
#以下使用到的 (?<=) 是 lookbehind assertion
# 解释起来意思是当看到","时,如果它之前也有","
# 那才匹配成功,
#而且取代时(?<=)里的东西不会被取代,因为匹配到
# 的是(?<=)后的东西。再来是它像/^/, /$/ 一样
# 不占字符宽度,所以下次比对的开始位置只离一个
# 字符而已。如果用 /,,/ 比对,就会离两个字符
say $str =~ s/(?<=,),/ $_/gr foreach qw/= ,/ ;
#方式2
my $str2 = "INIT,1,2,3,4" ;
for my $_s ($str, $str2){
say '-' x 30 ;
#关于split的第三个参数造成的差异
# 原po的例子刚好与perldoc里举的例子相似
my @tokens = split /,/, $_s, -1 ;
say join $_ , @tokens foreach ("= ", ", ") ;
}
__END__
#输出
INIT, = = =
INIT, , , ,