# Assumes no non-mp3 regular files in the dir use File::Basename; for (glob('/path/to/*')) { -f or next; # don't mess with directories, etc my ($file,$dir,$ext) = fileparse($_,qr/\.[^.]+$/); $file =~ tr/_/ /; $file =~ s/(\w+)/ucfirst $1/eg; rename $_, $dir.$file.'.mp3' or warn 'Failed to rename ',$_,': ',$!; }