跳过.和...... DirHandle的目录

Che*_*etu 0 perl perlscript

如何skipp.和DirHandle中的目录?

use DirHandle;
if (defined $d) {
    while (defined($_ = $d->read)) { print "$_ \n" ; }
 undef $d;
}
Run Code Online (Sandbox Code Playgroud)

Bor*_*din 5

顺便说一句,不要使用undef $d- $d = undef是优选的.

有几种方法 - 如果你知道Perl或正则表达式,它们都很简单

显而易见的

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

使用正则表达式

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

或者更整齐但不太安全,因为Linux目录节点可以有这样的名称.......等,你可以确保该节点包含其他的东西比一个点.

while ( defined(my $node  = $d->read) ) {
  next unless $node =~ /[^.]/;
  print "$dir\n"; 
}
Run Code Online (Sandbox Code Playgroud)

  • 为了扩展Borodin的注释,`$ d = undef;`将var设置为undefined,而`undef $ d;`也释放了一些与标量相关的内存,使得再次使用该变量更加昂贵. (4认同)