【发布时间】:2016-05-01 17:03:47
【问题描述】:
我正在查看 Perl 的 File::Find 模块并尝试了以下方式:
#!/usr/bin/perl
use warnings;
use strict;
use File::Find;
find({wanted => \&listfiles,
no_chdir => 1}, ".");
sub listfiles{
print $File::Find::name,"\n";
}
现在当我运行它时,我得到以下输出:
Noob@Noob:~/tmp$ perl test.pl
.
./test.txt
./test.pl
./test1.txt
./hello
./hello/temp.txt
现在,我在想,通过设置no_chdir=>1,我会让我的代码在遇到任何目录时不进入任何目录。但输出清楚地表明我的代码正在进入hello 目录并列出其文件。
那么,如何将我的代码更改为像ls 一样的行为而不进入任何目录。另外,我的文件/目录名称前面有./,可以删除吗?
我正在使用 Perl 5.14。
【问题讨论】:
-
确保 listfiles 不会为目录返回 true。手册页表明 no_chdir 需要您想要的功能才能意识到这一点。
-
你的最终目标是什么?只是列出给定目录中的文件?
File::Find模块遍历目录树。尽管可以让您想要的函数跳过子目录及其内容,但您最终会做的工作比仅列出单个目录中的文件要多。 -
no_chdir不会阻止遍历,它只会阻止实际的chdir系统调用。 -
如果你不想递归,你还不如直接
glob或opendir来读取文件。 -
@JonahBishop:我的最终目标是编写一个执行
ls功能的程序,但我最终写了print"$_ \n" for glob("*");。
标签: perl