use File::Basename; use File::Find; use vars '@listOfFiles'; find(sub{ return if -d $File::Find::name; #Remove last extension only... remove '?' to be greedy push @listOfFiles, (fileparse($File::Find::name, qr(\..+?)))[0]; }, '/path/of/least/resistance');