You can certainly do alot better than that long piece of code for this task though. The last two loops can be combined:
for (sort { $module{$a} <=> $module{$b} } keys %module) {
printf "%04d, %s\n", $module{$_}, $_;
}
Gets you rid of the synthetic
@list too. I have no idea what your if/elsif are supposed to sort out, either. And finally, instead of using
<DATA>, you can use
<> and just pipe the output from
grep to the script. A compressed version:
/^use\s+([^\s;]+)/ && $_{$1}++ while <>;
printf "%04d, $_\n", $_{$_} for sort { $_{$b} <=> $_{$a} } keys %_;
And then it's just
$ grep -hr ^use perl/ | perl foo.pl
Makeshifts last the longest.