use warnings; use strict; #use File::Copy; foreach( sort map { chomp;s/_(\d)_/_0$1_/g;s/_(\d)_/_0$1_/g;$_ } grep {/^\d+_\d\d\d\d_\d+_\d+_\d+_\d+_\d+_Table/} ){ my $newname = $_; $newname =~ s/^[0-9_]+//; printf "%38s%38s\n",$_,$newname; ## rename here. #move $_, $newname or print "Error renaming <$_> $!\n"; } __DATA__ Test file names 8_2007_5_22_15_34_23_Table_-_2007522_XYZ_W3.pdf 8_2007_5_22_22_34_12_Table_-_2007522_XYZ_W3.pdf 8_2007_5_2_15_34_23_Table_-_200752_XYZ_W3.pdf 8_2007_5_2_22_34_12_Table_-_200752_XYZ_W3.pdf 8_2007_5_2_5_34_23_Table_-_200752_XYZ_W3.pdf 8_2007_5_2_2_34_12_Table_-_200752_XYZ_W3.pdf 7_2007_5_22_16_35_23_Table_-_2007522_XYZ_W3.pdf 7_2007_5_22_23_36_12_Table_-_2007522_XYZ_W3.pdf blanks and other things 0 8_3007  ⌡○{§}╚