use strict; use warnings; use Data::Dumper; my @rows; my @empty; while (<>) { chomp; my @row=split /;/; push @rows,\@row; $empty[$_]||=$row[$_] for 0..$#row; } print "Empty columns:",join(", ",grep { $empty[$_] } 0..$#empty),"\n"; print Data::Dumper->Dump([\@rows],['*rows']);