如何拆分多个文件名并在输出中获取姓氏

时间:2019-03-26 12:20:38

标签: perl split

我必须拆分从另一个函数获得的路径名。我不想使用任何模块。我当前的代码是

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

输出

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

我只想要这样的文件名。

c.html
x.gif

1 个答案:

答案 0 :(得分:2)

您可以将所有内容替换为最后一个斜杠(/)。但是这种方法是不可移植的。 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