$ perl -Mwarnings -Mstrict -E ' my $str = " a | b|c |d|0| "; my @fields = map { $_ ||= ""; s/^\s*(.*?)\s*$/$1/; $_; } split /[|]/ => $str; say ">>>$_<<<" for @fields; ' >>>a<<< >>>b<<< >>>c<<< >>>d<<< >>><<< >>><<<