解决方法
- opendir(D,"/path/to/directory") || die "Can't open directory: $!\n";
- while (my $f = readdir(D)) {
- print "\$f = $f\n";
- }
- closedir(D);
编辑:哦,对不起,错过了“进入数组”部分:
- my $d = shift;
- opendir(D,"$d") || die "Can't open directory $d: $!\n";
- my @list = readdir(D);
- closedir(D);
- foreach my $f (@list) {
- print "\$f = $f\n";
- }
编辑2:大多数其他答案是有效的,但我想评论this answer具体,其中提供此解决方案:
- opendir(DIR,$somedir) || die "Can't open directory $somedir: $!";
- @dots = grep { (!/^\./) && -f "$somedir/$_" } readdir(DIR);
- closedir DIR;
首先,记录它做什么,因为海报没有:它传递返回的列表从readdir()通过一个grep()只返回那些值是文件(而不是目录,设备,命名管道等)和不开始一个点(这使得列表名称@dots误导,但这是由于他从readdir()文档复制时所做的更改)。因为它限制了它返回的目录的内容,我不认为它在技术上是一个正确的答案这个问题,但它说明了一个常用的成语用于过滤文件名在Perl,我认为这是有价值的文档。另一个看到很多的例子是:
- @list = grep !/^\.\.?$/,readdir(D);