#! /usr/bin/perl use strict; use warnings; use File::Find; my @empty; sub _is_empty_dir { my ( $dir ) = @_; # return FALSE if not a directory return 0 if !-d $dir; # This does not work; last directory is not removed opendir DH, $dir or die "$dir: $!\n"; my $cnt = grep { !m/\A\.\.?\z/ } readdir DH; # THIS WORKS! #opendir my $dh, $dir or die "$dir: $!\n"; #my $cnt = grep { !m/\A\.\.?\z/ } readdir $dh; #closedir $dh; # if $cnt = 0 (empty $dir), returns TRUE # if $cnt > 0 (not empty $dir), returns FALSE return !$cnt; } sub wanted { push @empty, $File::Find::name if _is_empty_dir( $File::Find::name ); } find( { wanted => \&wanted, }, 'C:/Temp' ); for my $dir ( @empty ) { print "deleting $dir\n"; rmdir $dir or warn "$dir: $!\n"; }