Хотя другие и ответили, после прочтения небольшого количества базовых имен за ответ rafl:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
Похоже, что проблема решена в одной строке.
Есть ли проблемы, связанные с этим, в отличие от других решений?