Удалить расширение файла и путь из строки в 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.
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