use strict; use warnings; while( my $str = ) { chomp $str; print "\nsplitting $str with these LIMITs:\n"; foreach my $limit ( 0, 5, 7, -1 ) { my $result = munge( $str, $limit ); printf " %2d => [$result]\n", $limit; } } sub munge { my ( $str, $limit ) = @_; my @fields = split( '\|', $str, $limit ); @fields = map { $_ || 'empty' } @fields; # using a different delimiter to illustrate non-split fields return join( '!', @fields ); } __DATA__ 1|2|3|4|5|6 1|2||4|| |2|3||| |||||