in reply to Removing common words

You don't do anything with values from %banned and you don't necessarily do lookups on the keys, so you might as well make it @banned. It is static, so you can define it only once, outside the loop.

Try this on for size,

my @banned = qw( at be for and to of in the as it are is am on an you me a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 10 ); for (1 .. 20000) { open local(*IN),"/var/www/data/$_.txt" or next; my $url = <IN>; my %count; while (<IN>) { $count{lc $_}++ for split /\W+/; } close IN or die $!; delete @count{@banned}; print # all the output stuff }
You are churning your wheels a little with some of your output code, but ditching temporary variables and using slices of anonymous arrays will fix that. You can replace reverse sort {foo($a) <=> foo($b)} with sort {foo($b) <=> foo($a)}.

After Compline,
Zaxo