Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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_Foreach_Chomp - Fatal编程技术网

如何使用perl从给定目录读取所有文件名?

如何使用perl从给定目录读取所有文件名?,perl,foreach,chomp,Perl,Foreach,Chomp,朋友们,我有一段代码,可以从目录中读取文件名并打印这些名称 opendir DIR1, "defaults" or die "cannot open dir: $!";#open the given dir my @default_files=readdir DIR1; foreach my $fls(@default_files){ chomp($fls); p

朋友们,我有一段代码,可以从目录中读取文件名并打印这些名称

opendir DIR1,  "defaults" or die "cannot open dir: $!";#open the given dir
        my @default_files=readdir DIR1;
        foreach my $fls(@default_files){ 
                        chomp($fls); 
                        print "$fls\n";
           }
当我运行上面的代码时,我得到了

.
..
PGR.csv
report.csv
std_headers.csv
tab_name.txt
我不知道前两行是什么?
提前感谢

第一行是:

  • 链接到您当前访问的目录

  • 链接到您正在访问的目录(父目录)上方的目录

编辑:

过滤掉两个命名条目的一种可能性是使用
grep

opendir DIR1, "tmp" or die "cannot open dir: $!";
my @default_files= grep { ! /^\.\.?$/ } readdir  DIR1;

foreach my $fls (@default_files) { 
   chomp($fls); 
   print "$fls\n";
}

“.”表示当前工作目录,“.”表示当前工作目录的父目录

更简单的替代方法是使用
glob
功能:

my @default_files = glob 'defaults/*';
或:

my@default_文件=;

这些函数过滤掉以
开头的文件和目录项,就像shell一样。

在目录列表中,
代表和
代表

在标量上下文中,可以通过显式检查来跳过这些条目:

while (defined(my $next = readdir $dir)) {
    next if $next =~ /\A[.][.]?\z/;
    # ...
}
或在列表上下文中:

my @entries = grep !/\A[.][.]?\z/, readdir $dir;
如果我已经在使用,我宁愿只使用它提供的
read\u dir
功能。以下内容将自动跳过
以及为每个返回的条目预先指定目录路径:

 my @paths = read_dir('/path/to/dir', prefix => 1);

最简单的解决方案可能是在阅读了上面代码段中给出的条目后过滤掉不需要的候选项。不要
chomp
通过
readdir
返回的文件名。文件名中的每个字符都对应于基础文件系统中文件名中的某些内容。相反,可以使用类似于
printqq{'$fls'\n}
的方法,这样就可以用尾随的换行符来区分文件名。
 my @paths = read_dir('/path/to/dir', prefix => 1);