Полезный код на perl'e для работы с деревом файлов

Анастасия

Полезный код на perl'e для работы с деревом файлов

Полезный код из книжки Mark Jason Dominius "Higher-Order Perl. Transforming Programs with Programs" для работы с папками и файлами. Функция dir_walk обходит все файлы и вложенные папки и вызывает для каждого из них функцию переданную в параметре:

sub dir_walk {
  my ($top, $filefunc, $dirfunc) = @_;
  my $DIR;

  if (-d $top) {
    my $file;
    unless (opendir $DIR, $top) {
      warn "Couldn't open directory top: $!; skipping.\n";
      return;
    }

    my @results;
    while ($file = readdir $DIR) {
      next if $file eq '.' || $file eq '..';
      push @results, dir_walk("$top/$file", $filefunc, $dirfunc);
    }
    return $dirfunc ? $dirfunc->($top, @results) : () ;
  } else {
    return $filefunc ? $filefunc->($top): () ;
  }
}

Примеры (тоже из книжки). Печать файлов и папок:

  dir_walk('.', sub{ print $_[0], "\n"}, sub{ print $_[0], "\n"})

Размер файлов и папок:

  sub file_size{
    -s $_[0]
  }
  sub dir_size{
    my $dir = shift;
    my $total = -s $dir;
    my $n;
    for $n (@_) {$total += $n}
    return $total;
  }
  my $total=dir_walk('.', \&file_size, \&dir_size);

Похожие записи

11:37:20 06.06.2011
Вася
Morgan Kaufman - это название издательства. Автор книги - Mark Jason Dominius.
12:44:02 06.06.2011
sn
RE:
ой, поправила
19:18:44 06.06.2011
Oleg Alistratov
use File::Find;
use File::Find; find( sub { ... }, '/###'); Даже HOP надо принимат критически.

Вы можете оставить
комментарий



    
© 2002-2016 Креограф. Все права защищены законом РФ
 Русский /  English