Remove file extension and path from a string in Perl

For portably getting the basename of a file given a full path, I'd recommend the File::Basename module, which is part of the core.

To do heuristics on file extensions I'd go for a regular expression like

(my $without_extension = $basename) =~ s/\.[^.]+$//;

Assuming that the path separator is '/', you can do it with a pair of substitutions:

$name =~ s{^.*/}{};     # remove the leading path  
$name =~ s{\.[^.]+$}{}; # remove the extension

You can also write that as a single substitution:

$name =~ s{^.*/|\.[^.]+$}{}g;

Although others have responded, after reading a bit on basename per rafl's answer:

($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"

Seems to solve the problem in one line.

Are there any problems related with this, opposed to the other solutions?