#! perl use strict; use warnings; use Heap::Priority; printf "%6d %s\n", length($_), $_ for get_N_longest(10, 'wordsEn.txt'); sub get_N_longest { my ($min, $infile) = @_; open my $infh, '<', $infile or die "Cannot open file '$infile' for reading: $!"; my $heap = Heap::Priority->new; $heap->highest_first; while (<$infh>) { chomp; $heap->add($_, length $_); } close $infh or die "Cannot close file '$infile': $!"; my @priorities = $heap->get_priority_levels; my @r; while (@r < $min) { my $priority = shift @priorities; push @r, $heap->get_level($priority); } return @r; }