in reply to Behavior of File::Find's preprocess and glob

It appears that find_function($dirname) is actually called before (or after, depending on your options) the "wanted" function is called so you need to filter directories out in find_function.

If you do filter our directory names in the "preprocess" function then you'll prevent File::Find from recursing into those directories.

Update: d'oh! mixed up the function names..

#!/usr/bin/perl -w use strict; use Cwd; use File::Find; my $filespec = qr/\.(?:txt|pl)$/; my $dir = $ARGV[0] || getcwd(); find( { wanted => \&find_function, preprocess => \&globber }, $dir ); sub find_function { return if (-d $File::Find::name); print $File::Find::name.$/; } sub globber{ my @files; foreach(@_){ push(@files, $_) if (/$filespec/ || (-d $_)); } return @files; }