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