use strict; use warnings; use Scalar::Util 'looks_like_number'; my @result; open my $file, "<", "my_big_file" or die "Can't open my_big_file: $!"; while (<$file>) { my @data = split "\t", $_; for my $col (0..$#data) { my $len = $length($data[$col]); if (!looks_like_a_number($data[$col])) { $result[$col]{is_a_string} = 1; } $result[$col]{max_len} = $len if ($len > $result[$col]{max_len}); next if $result[$col]{is_a_string}; # Don't check number range if this is a string # Check number range here ... # Other stuff ... } }