Как разделить несколько имен файлов и получить фамилию в выводе - PullRequest
0 голосов
/ 26 марта 2019

Я должен разделить имена путей, которые я получаю от другой функции. Я не хочу использовать какой-либо модуль. Мой текущий код

my $val ="@missing";
foreach($val){
    my f= split '/', $val;
    say ($f[1]);
}

Выход

xyz/c.html xyz/i/x.gif

Мне нужно только такое имя файла.

c.html
x.gif

1 Ответ

2 голосов
/ 26 марта 2019

Вы можете заменить все до последней косой черты (/). Но такой подход непереносим. Ядро Perl поставляется с File :: Spec , что позволяет писать переносимый код:

#!/usr/bin/perl
use warnings;
use strict;

my @paths = (
    "xyz/c.html",
    "xyz/i/x.gif",
);

# Non-portable code using regex
foreach my $path (@paths) {
    (my $basename = $path) =~ s,.*/,,;
    print "$path -> $basename\n";
}

# Portable implementation using Perl core modules
use File::Spec;

foreach my $path (@paths) {
    my(undef, undef, $basename) = File::Spec->splitpath($path);
    print "$path -> $basename\n";
}

exit 0;

Тестовый прогон:

$ perl dummy.pl
xyz/c.html -> c.html
xyz/i/x.gif -> x.gif
xyz/c.html -> c.html
xyz/i/x.gif -> x.gif
...