use File::Spec; my %cache; foreach my $file (`find d:\\Teszt -type f`) { my $age = -M $file; my ($vol, $dir, $name) = File::Spec->splitpath($file); if (exists $cache{$vol, $dir}) { next if $age > $cache{$vol,$dir}[1]; } $cache{$vol,$dir} = [$file, $age]; } foreach my $newest_file_in_directory (map {$$_[0]} values %cache) { ... process file ... }