Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Упростить линейный алгоритм


Автор: nIkTo 31.3.2010, 10:33
Помогите упростить :
Код

sub linear{
  my $self = shift;
  my ($max_depth, $directory) = @_;
  
  my %directories = ($directory => 0);
  my @dirs = ();
  
  while ((@dirs = keys(%directories)) and (my $directory = shift(@dirs))) {
    my $current_depth = $directories{$directory};
    delete $directories{$directory};
    next if ($current_depth > $max_depth);
    
    my @entries = ();
    eval {
      @entries = $self->dir($directory);
    };
    
    next unless @entries;
    
    for (parse_dir(\@entries)) {
      my ($name, $type, $size, $mtime, $mode) = @$_;
      
      next if (($name eq '.') or ($name eq '..'));
      
      if ($type eq 'd') {
        open(OUT, '>>linear.log');
        print OUT $directory."/".$name."\n";
        close(OUT);
        $directories{$directory."/".$name} = $current_depth+1;
      }
    }
  }
}


Мне не нравится этот кусок :
Код

  while ((@dirs = keys(%directories)) and (my $directory = shift(@dirs))) {
    my $current_depth = $directories{$directory};
    ...
  }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)