Прога сканирует дерево каталогов (Использование File::Find исключено). И заполняет структуру для последующей обработки..
Собственно проблема. Мне нужно онраничить ход рекурсии наличием в обрабатываемой папке файла .description Вроде все дела правильно, но сканирование просто выдает какой то бред.. :(собссно скрипт.. точнее проблемная часть
#!/usr/bin/perl
use strict;
use File::Basename;
use File::Find;
use Fcntl;
use configure; # импорт $DFNAME это файл ограничитель (.description)
# $TARGET это точка старта сканирования
use POSIX qw(locale_h);
setlocale(LC_CTYPE,'ru_RU.KOI8-R');sub fiD # поиск в текущей папке ограничителя
{
opendir DIR,shift or die "fiD(): Cant open $!\n";
my $file=grep {/^$DFNAME/} readdir DIR;
closedir DIR or die "fiD(): Cant close $TARGET/OS $!\n";
return $file;
}my (чsc,%files,╨ck,$fl,$ell);
sub folder {
my $dir=shift;
return unless $dir;
opendir(DIR,$dir) or (warn "Can't opendir $dir: $!" and return 0);
my @files=readdir(DIR);
closedir(DIR);
foreach (@files) {
next if /^\.\.?$/;if (-d $filename) {
print qq(Folder: $filename\n);
folder($filename);
$back{$filename}=$dir;
$fl=0;
}else{
my $dfn="$dir/$DFNAME";
my $path=dirname($filename);
my $name=basename($filename);
if(-e $dfn){
unless($fl){
open(FH,"< $dfn") or die $!;
push @{$desc{$path}},$_ while(<FH>);
close(FH) or die $!;
$fl++;
}
push @{$files{$path}},$name if $filename ne $dfn;
}
}
}
}folder($TARGET);
Млин где в рекурсии поставить ограничение??! Я уже замахался .. подскажите народ плззззззз!
>Прога сканирует дерево каталогов (Использование File::Find исключено). И заполняет структуру для последующей
>обработки..
>Собственно проблема. Мне нужно онраничить ход рекурсии наличием в обрабатываемой папке файла
>.description Вроде все дела правильно, но сканирование просто выдает какой то
>бред.. :(
>
>собссно скрипт.. точнее проблемная часть
>
>#!/usr/bin/perl
>use strict;
>use File::Basename;
>use File::Find;
>use Fcntl;
>use configure; # импорт $DFNAME это файл ограничитель (.description)
>
> #
>$TARGET это точка старта сканирования
>use POSIX qw(locale_h);
>setlocale(LC_CTYPE,'ru_RU.KOI8-R');
>
>sub fiD # поиск в текущей папке ограничителя
>{
>opendir DIR,shift or die "fiD(): Cant open $!\n";
> my $file=grep {/^$DFNAME/} readdir DIR;
>closedir DIR or die "fiD(): Cant close $TARGET/OS $!\n";
> return $file;
>}
>
>my (чsc,%files,╨ck,$fl,$ell);
>
>sub folder {
> my $dir=shift;
> return unless $dir;
> opendir(DIR,$dir) or (warn "Can't opendir $dir: $!" and return 0);
> my @files=readdir(DIR);
> closedir(DIR);
> foreach (@files) {
> next if /^\.\.?$/;
my $filename="$dir/$_"; # забыл сорри
> if (-d $filename) {
> print qq(Folder: $filename\n);
> folder($filename);
> $back{$filename}=$dir;
> $fl=0;
> }else{
> my $dfn="$dir/$DFNAME";
> my $path=dirname($filename);
> my $name=basename($filename);
> if(-e $dfn){
> unless($fl){
> open(FH,"< $dfn")
>or die $!;
> push @{$desc{$path}},$_ while(<FH>);
> close(FH) or
>die $!;
> $fl++;
> }
> push @{$files{$path}},$name if $filename
>ne $dfn;
> }
> }
> }
>}
>
>folder($TARGET);
>
>Млин где в рекурсии поставить ограничение??! Я уже замахался .. подскажите народ
>плззззззз!
может добваить что-то типа
if ( -f '.description' ) { next}
??