Удалить расширение файла и путь из строки в 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.
Ответы
Ответ 1
Для портативного получения базового имени файла с полным путём я бы рекомендовал модуль File::Basename
, который является частью ядро.
Чтобы выполнить эвристику в расширениях файлов, я бы выбрал регулярное выражение, например
(my $without_extension = $basename) =~ s/\.[^.]+$//;
Ответ 2
Хотя другие ответили, после чтения бит в basename за rafl ответ:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
Кажется, проблема решена в одной строке.
Существуют ли какие-либо проблемы, связанные с этим, против других решений?
Ответ 3
Предполагая, что разделителем пути является '/'
, вы можете сделать это с помощью пары подстановок:
$name =~ s{^.*/}{}; # remove the leading path
$name =~ s{\.[^.]+$}{}; # remove the extension
Вы также можете написать это как одну замену:
$name =~ s{^.*/|\.[^.]+$}{}g;