当前位置:  开发笔记 > 编程语言 > 正文

如何读入Perl中目录的内容?

如何解决《如何读入Perl中目录的内容?》经验,为你挑选了5个好方法。

如何让Perl将给定目录的内容读入数组?

反引号可以做到,但是有一些使用'scandir'或类似术语的方法吗?



1> jj33..:
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:其他大多数答案都是有效的,但我想特别评论这个答案,其中提供了这个解决方案:

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);

此片段从目录句柄D中读取 "." 之外的所有内容.和'..',因为很少希望在列表中使用它们.



2> Pat..:

一个快速而肮脏的解决方案是使用glob

@files = glob ('/path/to/dir/*');


值得注意的是,`glob`在Windows上的路径中没有按预期工作 - http://stackoverflow.com/questions/7898496/can-not-list-directory-including-space-using-perl-in- Windows的平台

3> Gary Richard..:

IO :: Dir很不错,并提供了一个绑定的哈希接口.

来自perldoc:

use IO::Dir;
$d = IO::Dir->new(".");
if (defined $d) {
    while (defined($_ = $d->read)) { something($_); }
    $d->rewind;
    while (defined($_ = $d->read)) { something_else($_); }
    undef $d;
}

tie %dir, 'IO::Dir', ".";
foreach (keys %dir) {
    print $_, " " , $dir{$_}->size,"\n";
}

所以你可以这样做:

tie %dir, 'IO::Dir', $directory_name;
my @dirs = keys %dir;



4> rix0rrr..:

这将在一行中完成(注意末尾的'*'通配符)

@files = ;
# To demonstrate:
print join(", ", @files);



5> David Precio..:

你可以使用DirHandle:

use DirHandle;
$d = new DirHandle ".";
if (defined $d)
{
    while (defined($_ = $d->read)) { something($_); }
    $d->rewind;
    while (defined($_ = $d->read)) { something_else($_); }
    undef $d;
}

DirHandle提供了一种替代方案中,清洁器接口到opendir(),closedir(),readdir(),和rewinddir()功能.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有