use File::Find; @ARGV = '.' unless @ARGV; find sub { # all code comes here return unless -f; # $_ is basename, use this because we have chdir'ed to its directory if(/\.txt$/) { say $File::Find::name; } elsif(/\.zip$/) { # process ZIP file } elsif(/\.mp3$/) { # process mp3 file } }, @ARGV;