use strict; use warnings; my $title = " A B C D\n"; my $format = "%2d %2d %2d %2d\n"; print $title; printf $format , @{ $_ } for fetch_data(); sub fetch_data { my @data; while ( my $line = ) { next if $line =~ m/^\s*#/ or $line =~ m/^\s*$/ ; push @data , [ map get_standin( $_ ), split /;/ , $line , 4 ]; } return @data; } sub get_standin { my ( $in ) = @_; my $standin = 0; return $standin unless defined $in; for ( $in ) { s/^\s+//; s/\s+$//; } return length $in ? $in : $standin; } __DATA__ # Data (say 2 digit numbers at most, or missing). 1; 2 ; 3; 5 9;97; ;0 ; 6 ; 8 ; ;;; 76