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";
}