作者:
flu (Crazy Rhythm)
2020-04-29 21:11:57use 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, , , ,