获取文件名

时间:2015-06-27 21:44:44

标签: perl filenames glob

如何使用glob()函数获取存储在特定文件夹中的文件的特定名称?我有一个示例源代码,但有不同的输出,它显示文件的完整路径,而不是只显示特定的文件名。如何仅从路径集中检索文件名,或者如何直接访问并获取特定文件名?谢谢!

@files = glob('/Perl/Assignment/*');
foreach $files(@files){
    print "$files\n";
}

输出:

/Perl/Assignment/file1.txt
/Perl/Assignment/file2.txt
/Perl/Assignment/file3.txt

预期产出:

file1.txt
file2.txt
file3.txt

2 个答案:

答案 0 :(得分:7)

您可以使用File::Basename

use File::Basename;
my @files = glob('/Perl/Assignment/*');
foreach my $file (@files){
    print basename($file), "\n";
}

很长一段时间它一直是Perl核心的一部分。

(在这种情况下必须使用parens,否则它认为"\n"basename而不是print的参数。)

答案 1 :(得分:1)

如果您给glob一个路径,那么它将返回一个路径。您可以chdir到目录并仅指定文件名模式,例如

use strict;
use warnings;
use 5.010;
use autodie;

use constant DIR => '/Perl/Assignment';

chdir DIR;

my @files = glob '*';

say for @files;

或者,如果工作目录没有变化很重要,那么您可以使用File::chdir模块对其进行本地化,就像这样

use strict;
use warnings;
use 5.010;
use autodie;

use constant DIR => '/Perl/Assignment';

my @files = do {
    local $CWD = DIR;
    glob '*';
};

say for @files;