readdir DIRHANDLE

返回由 opendir 打开的目录的下一个目录条目。如果在列表上下文中使用,则返回目录中所有其余条目。如果没有更多条目,则在标量上下文中返回未定义值,在列表上下文中返回空列表。

如果您计划对 readdir 的返回值进行文件测试,最好在前面加上相关目录。否则,由于我们没有在那里 chdir,它将测试错误的文件。

opendir(my $dh, $some_dir) || die "Can't opendir $some_dir: $!";
my @dots = grep { /^\./ && -f "$some_dir/$_" } readdir($dh);
closedir $dh;

从 Perl 5.12 开始,您可以在 while 循环中使用一个空的 readdir,这将在每次迭代中设置 $_。如果将 readdir 表达式或将 readdir 表达式显式赋值给标量用作 while/for 条件,则该条件实际上测试表达式的值是否已定义,而不是测试其常规真值。

opendir(my $dh, $some_dir) || die "Can't open $some_dir: $!";
while (readdir $dh) {
    print "$some_dir/$_\n";
}
closedir $dh;

为了避免让运行早期版本 Perl 的代码的潜在用户因神秘故障而感到困惑,请将此类内容放在文件顶部,以表明您的代码适用于较新版本的 Perl

use v5.12; # so readdir assigns to $_ in a lone while test