in reply to split keywords

Like this?
use strict; my $input = "keyword1, keyword2; keyword3&mdash; keyword4 &ndash; key +word5"; my $output = "<keyword>" . join ("</keyword>, <keyword>", split /\s*(? +:,|;|\&mdash;|&ndash;)\s*/, $input) . "</keyword>"; print $output;
Or do you want to preserve the original separator in your output?

Update: separator preserving version:
use strict; use warnings; my $output = ""; my $input = "keyword1, keyword2; keyword3&mdash; keyword4 &ndash; key +word5"; my @data = split /\s*(,|;|\&mdash;|&ndash;)\s*/, $input; for (my $i=0; $i<=$#data; $i+=2) { $output .= "<keyword>" . $data[$i] . "</keyword>" . ($data[$i+1] ? + $data[$i+1] : ""); } print $output;
Alternative inspired by bart:
while( my($val, $sep) = splice @data, 0, 2 ) { $sep = "" unless $sep; $output .= "<keyword>$val</keyword>$sep"; }


holli, /regexed monk/