#!/usr/bin/perl use warnings; use strict; use File::Find qw{ find }; find({ wanted => \&wanted, preprocess => \&filter, },'/home/choroba/0'); sub wanted { return unless 'list.dat' eq $_ and $File::Find::dir !~ /(?: baby | dead )$/x; warn $File::Find::name; } sub filter { return if $File::Find::dir =~ m{ zoo/(?!abc) }x; return @_ }