Em vez de lutar com otimização de perl, use um wrapper como este:
wrapper.sh
#!/bin/bash
for i in 'ls '
do
echo $i
<perl script> $i
done
Use da seguinte forma:
./wrapper.sh *.html
Então, em vez do script perl fazer o loop através de 7k de arquivos em uma execução, é um novo começo para cada arquivo.
Eu também sugiro que você redirecione a saída para um arquivo em vez da tela. É possível que o terminal (xterm, gnome-term, etc) tenha usado toda a sua memória se configurado para buffer / linhas ilimitadas.