Perl 中用于获取文件名的 glob() 函数

glob() function in Perl for getting filenames

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

您可以使用 File::Basename:

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

长期以来,它一直是核心 Perl 的一部分。

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

如果您给 glob 一个路径,那么它将 return 一个。您可以 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;