#perl
#perl
Вопрос:
У меня есть следующее в переменной в Perl.
my $test = * file/test/ttt/rrr/aaa/abc.fff.ter.yyy:myfilename.txt
Я хочу извлечь
myfilename.txt
Начальный путь с / изменится (может быть много каталогов, которые не являются фиксированными), и мне нужно только последнее имя файла.
Как я могу это сделать?
Я пытался использовать:
$filename= (split ///, $test)[4] ;
Ответ №1:
Вероятно, лучшим решением будет использовать модуль, предназначенный именно для этого.
use File::Basename;
my $filename = basename($test);
Другие решения, вероятно, основаны на регулярных выражениях:
Если вы хотите извлечь часть строки, которая находится после двоеточия, как в этой строке, вы могли бы сделать:
my ($filename) = $test =~ /:(. )/;
Или, если вы хотите извлечь базовое имя расширение в конце
my ($filename) = $test =~ /(w .w )$/;
Или split
решение на основе
my $filename = (split /:/, $test)[-1];
Ответ №2:
Вы можете вести обратный отсчет от конца списка с отрицательным индексом. Последним элементом списка является -1
предпоследний -2
и так далее:
$filename= (split ///, $test)[-1];
Если у вас есть список в массиве, $#array_name
это индекс последнего элемента. Это немного более неуклюже, чем просто использовать -1
:
my @array = qw( 1 3 7 );
my $last = $array[$#array];
Если вам не важен массив, вы можете удалить последний элемент с pop
помощью , который возвращает это значение:
my $last = pop @array
Ответ №3:
Добавлен один из методов из приведенных выше ответов:
$fullpath = $ARGV[0];
my ($filename) = $fullpath=~m/(?:\|/)(?:[^:] ):([^/\] )$/;
print $filename;
Приведенный выше код должен работать в Windows или Linux.