$ perl -E ' say "oldfile\t ext \tnewfile"; say "-------\t --- \t-------"; my $newname = "edddd"; for (qw{OPQ.RST .U V. .W. X.Y Z . ..}) { my $ext = substr $_, rindex($_, ".") + 1 || length; say "$_\t|$ext|\t$newname" . (length $ext ? ".$ext" : ""); } ' oldfile ext newfile ------- --- ------- OPQ.RST |RST| edddd.RST .U |U| edddd.U V. || edddd .W. || edddd X.Y |Y| edddd.Y Z || edddd . || edddd .. || edddd