in reply to AWTDI: Renaming files using regexp

Here's a solution using (positive & negative) look-aheads in a regex substitution..
first, note the extra tests I added to make sure it doesn't modify part of the path or a single-dot filename. Also note that the second regex assumes that hte directory separator is /.
while(<DATA>){ # s/\.(?=.*?\.)/_/g; # can you this if you know you have onl +y the filename s#\.(?!.*?/)(?=.*?\.)#_#g; # This one accounts for paths, and modi +fies only the filename print; } __DATA__ test.zip blah.blah.ext/stuff.bar/test0.file0.new_20060411.zip test1.file1.new_20060411.zip test2.file2.new_20060411.zip test3.file3.new_20060411.zip
so, as a one-liner to generate the mv commands to paste into a shell:
ls | perl -ne 'chomp; $f=$_; s#\.(?!.*?/)(?=.*?\.)#_#g; print "mv $f $ +_\n";'
Update: See ikegami's warning about '. ext'