Используйте метод fileparse File :: Basename, чтобы найти суффикс, затем выполните поиск / замену.
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use File::Basename qw(fileparse);
my $oldfilename = "/foo/bar/baz.txt";
my($filename, $directories, $suffix) = fileparse($oldfilename,qr/\.[^.]*$/);
$filename =~ s/\.$suffix$//;
my $newfilename = $filename.".dat";
say "New filename is:".$newfilename;
say "New fullpath is:".$directories.$newfilename;
exit 0;
Выход:
$ ./basename.pl
New filename is:baz.dat
New fullpath is:/foo/bar/baz.dat