$filename !~ /^[-\w]\.pl$/
Это выражение допускает только имя файла длиной в один символ (расширение не включено), причем этот символ является символом слова или тире.
Полагаю, вы на самом деле имели в виду:
$filename !~ /^[-\w]+\.pl$/
Примечание: как прокомментировал melpomene , еще одна проблема с вашим регулярным выражением состоит в том, что в нем будет разрешено имя файла с завершающей новой строкойпосле продления.Чтобы избежать этого, вы можете использовать утверждение \z
:
$filename !~ /^[-\w]+\.pl\z/