>perl -wMstrict -le "my @lines = ( 'ABCD', 'A|B|C|D', 'A,B,C|D', 'A,B,C', 'A,B,C,D,E', 'A,B,C,D'); ;; LINE: for my $line (@lines) { print qq{processing '$line'}; ;; warn qq{'$line' has no comma} and next LINE if not $line =~ m{,}xms; warn qq{'$line' has nasty pipe} and next LINE if $line =~ m{ \| }xms; ;; warn qq{not exactly 4 fields in '$line'} and next LINE if 4 != (my ($s, $a, $c, $r) = split /,/, $line); ;; print qq{success: s '$s' a '$a' c '$c' r '$r'}; } " processing 'ABCD' 'ABCD' has no comma at -e line 1. processing 'A|B|C|D' 'A|B|C|D' has no comma at -e line 1. processing 'A,B,C|D' 'A,B,C|D' has nasty pipe at -e line 1. processing 'A,B,C' not exactly 4 fields in 'A,B,C' at -e line 1. processing 'A,B,C,D,E' not exactly 4 fields in 'A,B,C,D,E' at -e line 1. processing 'A,B,C,D' success: s 'A' a 'B' c 'C' r 'D'