use strict; use warnings; while( my $line = ) { chomp $line; my( $a, $b, $c, $d ) = split /(?(?=^[^|]*\|)(?{die "Pipe [|] detected in input."})|)[,\t]/, $line; print "[($a)($b)($c)($d)]\n"; } __DATA__ ABC,DEF,GHI,JKL ABC|DEF|GHI|JKL