readdir在第二次调用时返回空数组



当我用opendir()打开一个目录,然后连续调用readdir()两次时,后者返回一个空数组。


minimal_example.pl:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
opendir(my $DIRH, "/home") or die "Cannot open /home: $!n";
my @FILES  = readdir($DIRH);
my @FILES2 = readdir($DIRH);
print Dumper @FILES;
print Dumper @FILES2;

输出:

$VAR1 = [
'.',
'..',
'users',
'sysadmin',
'ne'
];
$VAR1 = [];

这是预期的行为吗?

Perl中的许多运算符的返回方式不同,这取决于它们是在列表上下文中调用还是在标量上下文中调用。readdir 就是这样

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

由于代码中readdir的返回被分配给了一个数组,它位于列表上下文中,因此它读取该目录中的所有内容。因此,当目录句柄到达文件列表的末尾时;读取";返回一个空列表(即使同时添加了更多文件(。

我看不出两次读取文件列表会产生什么效果,但要多次处理一个目录,可以使用rewinddir。

是的,这是预期的行为。您对readdir()的第一次调用读取了整个目录,并将其内容分配给了@FILES。这没有给第二个readdir()留下任何可读取的内容,因此它没有返回任何内容。

相关内容

  • 没有找到相关文章

最新更新