0

如何跳过。和.. DirHandle 中的目录?

use DirHandle;
if (defined $d) {
    while (defined($_ = $d->read)) { print "$_ \n" ; }
 undef $d;
}
4

1 回答 1

5

顺便说一句,不要使用undef $d-$d = undef是可取的。

有几种方法——如果您了解 Perl 或正则表达式,所有这些方法都很简单

显而易见的

while ( defined(my $node  = $d->read) ) {
  next if $node eq '.' or $node eq '..';
  print "$dir\n"; 
}

使用正则表达式

while ( defined(my $node  = $d->read) ) {
  next if $node =~ /\A\.\.?\z/;
  print "$dir\n"; 
}

或者,更整洁但不太安全,因为 Linux 目录节点可以具有诸如等之类的名称.......您只需确保该节点包含点以外的其他内容.

while ( defined(my $node  = $d->read) ) {
  next unless $node =~ /[^.]/;
  print "$dir\n"; 
}
于 2015-04-15T12:30:12.020 回答