
Полезный код на 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
ой, поправила
19:18:44 06.06.2011
Oleg Alistratov
use File::Find;
use File::Find;
find( sub { ... }, '/###');
Даже HOP надо принимат критически.