URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3220
[ Назад ]

Исходное сообщение
"HELP!!! Как ограничить рекурсивное сканирование??"

Отправлено Фомин Максим , 29-Июл-04 12:45 
Прога сканирует дерево каталогов (Использование 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);

Млин где в рекурсии поставить ограничение??! Я уже замахался .. подскажите народ плззззззз!


Содержание

Сообщения в этом обсуждении
"HELP!!! Как ограничить рекурсивное сканирование??"
Отправлено pikachu , 29-Июл-04 12:56 
>Прога сканирует дерево каталогов (Использование 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);
>
>Млин где в рекурсии поставить ограничение??! Я уже замахался .. подскажите народ
>плззззззз!



"HELP!!! Как ограничить рекурсивное сканирование??"
Отправлено Wizard , 05-Авг-04 08:14 
может добваить что-то типа
if ( -f '.description' ) { next}
??