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 #### [(ABC)(DEF)(GHI)(JKL)] Pipe [|] detected in input. at (re_eval 1) line 1, line 2.