whileループ
if文などの条件式においては、未定義値(undef)、空文字、数字の0や文字の「0」なども全て偽と判別されますが、「defined」関数を使えば未定義(undef)だけを判別することが出来ます。
defined関数 - その他の関数 - Perl関数のリファレンス
ということなので
my $folder = 'folder'; my $dh; my $file; opendir($dh,$folder); while($file = readdir($dh)){ } closedir($dh);
ではなくて
my $folder = 'folder'; my $dh; my $file; opendir($dh,$folder); while(defined($file = readdir($dh))){ } closedir($dh);
のほうがよさそう。