use strict; my $input = "keyword1, keyword2; keyword3— keyword4 – keyword5"; my $output = "" . join (", ", split /\s*(?:,|;|\—|–)\s*/, $input) . ""; print $output; #### use strict; use warnings; my $output = ""; my $input = "keyword1, keyword2; keyword3— keyword4 – keyword5"; my @data = split /\s*(,|;|\—|–)\s*/, $input; for (my $i=0; $i<=$#data; $i+=2) { $output .= "" . $data[$i] . "" . ($data[$i+1] ? $data[$i+1] : ""); } print $output; #### while( my($val, $sep) = splice @data, 0, 2 ) { $sep = "" unless $sep; $output .= "$val$sep"; }