2013-04-12 2 views

ответ

7

File::Basename может помочь вам извлечь информацию вам нужно (и является частью основных модулей)

my($filename, $directories, $suffix) = fileparse($path); 
+0

Спасибо, у .. На самом деле я только что начал перл и изучал вещи. Большое спасибо за поддержку! :) –

1
my($path, $file) = $getpath =~ m{(.+)/([^/]+)$}; 

Есть хорошие модули кросс платформенные для этого тоже, см Path::Tiny и File::Spec.

+0

Thank U .. На самом деле я только начал перл и обучения вещи .. спасибо за ур поддержки !! :) –

1
my $getpath = "/u/project/path/file.name"; 
my @arr=split /\//,$getpath; 
my $filename=$arr[(scalar(@arr))-1]; #will give you the filename 
my $path_no_filename= join "/",@arr[0..(scalar(@arr)-2)]; #will give everything except the filename 
+1

Вы можете использовать отрицательные индексы для доступа к элементу с конца: '$ filename = $ arr [-1]' и использовать неявный скалярный контекст для арифметических операторов для диапазона: '$ path = join '/', @ обр [0 .. @ обр-2] '. Но может быть более элегантно сказать '$ filename = pop @arr; $ path = join '/', @ arr'. – amon

+0

Если кто-то не хочет использовать модули, я думаю, тогда это лучший способ изучить программирование. Спасибо за поддержку! :) –

+0

Меня просто интересовало решение на основе регулярных выражений: мне нужно строить имена из путей. – Wolf

3

Прежде всего, есть много Perl модули могут делать то, что вы хотите, попробуйте найти на CPAN. Во-вторых, я предлагаю использовать модуль File :: Spec. Например:

use File::Spec; 
($volume,$directories,$file) = File::Spec->splitpath($path); 

тогда $ каталоги будут "/ и/проект/путь", и $ файл будет "file.name".

Файл :: Spec модуль рассчитан на пять операционных систем: Unix (Linux), Mac, Win32, OS2, VMS. И этот модуль также предлагает множество других операций с файлами, таких как catpath, updir, file_name_is_absolute и т. Д. Вам не нужно менять свои коды на разные системы.

Ref: File::Spec

+0

Спасибо u .. На самом деле я только что начал перл и изучал вещи. Большое спасибо за поддержку! :) –

+0

@Mak_Thareja Добро пожаловать, и добро пожаловать в фантастический мир Перла :) – noalac

+0

Ya кажется фантастическим –