in reply to perl filenames and square brackets

All above is correct. While you're better off, overall, changing the whole algorithm to using some File::Find variant, the simplest most direct solution to the problem, is to just replace the glob with an opendir, readdir combo. So, rather than:
$dir .= '*'; my @list = glob($dir);
you could do:
opendir(DIR, $dir) or die $!; my @list = readdir(DIR) or die $!; closedir(DIR) or die $!;
So that you're actually looking at the file contents, directly, rather than relying on globbing.
------------ :Wq Not an editor command: Wq