Удалить расширение файла и путь из строки в Perl



Я хочу получить имя файла без его пути (если он является частью строки), а также расширение.



Например:



/path/to/file/fileName.txt     # results in "fileName"
fileName.txt # results in "fileName"
/path/to/file/file.with.periods.txt # results in "file.with.periods"


Итак, в принципе, я хочу удалить все, что было до и включая последнее "/", если оно присутствует, а также последнее ".- вместе с любыми метасимволами после него.



Извините за такой вопрос новичка, но я новичок в perl.
658   3  

3 ответов:

Для переносимого получения базового имени файла с полным путем я бы рекомендовал File::Basename модуль, являющийся частью ядра.

Для эвристики расширений файлов я бы выбрал регулярное выражение типа

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

Хотя другие ответили, прочитав немного о basename в ответе рафла:

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

, кажется, решает проблему в одной строке.

Есть ли какие-либо проблемы, связанные с этим, в отличие от других решений?

Это можно сделать с помощью простых подстановок:

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

В этом примере предполагается, что / является разделителем путей.

Comments

    Ничего не найдено.