$ perl -E 'use File::Basename; say "|$_|" for fileparse("X.tgz", qw{.gz .tgz})'
|X.|
|./|
|tgz|
$ perl -E 'use File::Basename; say "|$_|" for fileparse("X.tgz", qw{\.gz \.tgz})'
|X|
|./|
|.tgz|
####
$ perl -E 'use File::Basename; say "|$_|" for fileparse("X.tar.gz", qw{\.gz \.tgz \.tar\.gz})'
|X.tar|
|./|
|.gz|
$ perl -E 'use File::Basename; say "|$_|" for fileparse("X.tar.gz", qw{\.tgz \.tar\.gz \.gz})'
|X|
|./|
|.tar.gz|
####
substr $filename, rindex($filename, ".") + 1 || length $filename
####
$ 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