Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中循环遍历目录中的文件?_Perl_File - Fatal编程技术网

如何在Perl中循环遍历目录中的文件?

如何在Perl中循环遍历目录中的文件?,perl,file,Perl,File,可能重复: 我想循环浏览同一目录中包含的几百个文件。如何在Perl中实现这一点?您可以使用或 或者,您可以使用以下模块: 通常children()将不包括self和parent条目。和。。(或在非Unix系统上的等价物),因为这就像是我自己的事。如果确实需要所有目录条目,包括这些特殊条目,请为all参数传递一个真值: @c = $dir->children(); # Just the children @c = $dir->children(all => 1); # All

可能重复:

我想循环浏览同一目录中包含的几百个文件。如何在Perl中实现这一点?

您可以使用或

或者,您可以使用以下模块:

通常
children()
将不包括self和parent条目。和。。(或在非Unix系统上的等价物),因为这就像是我自己的事。如果确实需要所有目录条目,包括这些特殊条目,请为all参数传递一个真值:

@c = $dir->children(); # Just the children
@c = $dir->children(all => 1); # All entries
此外,还有一个no_hidden参数将排除所有通常“隐藏”的条目-在Unix上,这意味着排除所有以点开头的条目(
):

返回目录中所有文件和目录的
Path::Tiny
对象列表。自动排除
”。“

如果提供了可选的
qr/
参数,则它仅返回与给定正则表达式匹配的子名称的对象。只有基名称用于匹配:

将目录项列表放入数组会浪费一些内存(而不是一次只获取一个文件名),但如果只有几百个文件,这不太可能成为问题

Path::Class
可移植到*nix和Windows以外的操作系统。另一方面,AFAIK的实例比
Path::Tiny
实例使用更多内存

如果内存有问题,最好在
循环中使用
readdir

#/usr/bin/perl-w
#!/usr/bin/perl -w

my @files = <*>;
foreach my $file (@files) {
  print $file . "\n";
}
我的@files=; foreach my$文件(@files){ 打印$file。“\n”; }
在哪里

@files=;
可能是

 @files = </var/www/htdocs/*>;
 @files = </var/www/htdocs/*.html>;
@files=;
@文件=;
等等。

享受

opendir(DH, "directory");
my @files = readdir(DH);
closedir(DH);

foreach my $file (@files)
{
    # skip . and ..
    next if($file =~ /^\.$/);
    next if($file =~ /^\.\.$/);

    # $file is the file used on this iteration of the loop
}

这个问题不是这个问题的翻版吗@莱昂纳多·赫雷拉的确如此。对不起,我不记得那个了。投票结束。我不认为这是重复的。问题是如何循环浏览目录中的文件。标记的“复制”询问如何列出目录中的所有文件。显然不同。为什么标记为重复?reead_dir会删除。和。。对于您,如果需要,可以将目录前缀添加到文件名中。谢谢!如果($file=~/^.+$/),我将使用
next但是,为了避免第二条语句;)@ashraf regex必须是/^\.+$/而不是/^.+$/@Rauf是的,我想你是对的!:)这不会列出GNU/Linux和其他类似操作系统上的隐藏文件(以点开头的文件)。
#!/usr/bin/perl -w

my @files = <*>;
foreach my $file (@files) {
  print $file . "\n";
}
 @files = <*>;
 @files = </var/www/htdocs/*>;
 @files = </var/www/htdocs/*.html>;
opendir(DH, "directory");
my @files = readdir(DH);
closedir(DH);

foreach my $file (@files)
{
    # skip . and ..
    next if($file =~ /^\.$/);
    next if($file =~ /^\.\.$/);

    # $file is the file used on this iteration of the loop
}