sub _process_files { my $file = shift; ... # .json file if (-f $file and ($file =~ /\.json\Z/)) { _process_json($file); } # Directory elsif (-d $file) { # for each file in directory, process find ( { wanted => sub { \&_process_files($File::Find::name) if -f}, no_chdir => 1 }, "$file"); } }