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

5

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

8
您可以使用File::Basename模块实现此功能:
use File::Basename;
my @files = glob('/Perl/Assignment/*');
foreach my $file (@files){
    print basename($file), "\n";
}

这已经是Perl的核心部分很长时间了。

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


非常感谢您,Jim Davis先生! - Raven
如何将特定文件名插入数据库?我该如何应用基本名称的概念? - Raven

3
如果你给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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接