sub process_file { open F, shift; # ...do stuff with F... close F; } sub recurse_dir { opendir D, shift; while (readdir D) { process_file ($_) if -f; recurse_dir ($_) if -d; } closedir D; } recurse_dir ($ARGV[0]);