如何使用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
答案 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;