Forum Webscript.Ru

Программирование => Perl => Тема начата: metton от 16 Августа 2003, 20:26:57

Название: проблема с построением дерева каталогов
Отправлено: metton от 16 Августа 2003, 20:26:57
Собственно, сабж.
Сразу оговорюсь для противников создания велосиподов: я делаю это чисто в целях практики и использоваться это не будет, так что не важна даже его эффективность. Просто в книжке, по которой я сейчас изучаю Perl было задание написать такой алгоритм в целях практики.
В общем-то, написал, но вот очень не нравится он мне - очень уж зависим.
В общем, вот код:


#!/usr/bin/perl -w

$i = -1;
@files = ();

sub FolderFiles
{
$i++;
my ($d_name) = @_;

opendir($d_name, $d_name) || die $!;

while($files[$i] = readdir $d_name)
{
next if $files[$i] =~ /^\\.\\.?$/;

if(-d $d_name.\'/\'.$files[$i])
{
$files[$i] = $d_name.\'/\'.$files[$i];
FolderFiles($files[$i]);
}
$i++;
}
closedir($d_name) || die \'Cannot close: \'.$!;

return @files;
}


@files = grep !/^$/, FolderFiles(\'.\');

$k = 0;
foreach(@files)
{
print $k,":",$_,"\\n";
$k++;
}



Вопрос: почему при выводе возникают предупреждения?
Откуда при прохождении папок возникают пустые элементы массива?
И есть ли в Perl аналог static в ПХП?

Спасибо.
Название: проблема с построением дерева каталогов
Отправлено: Wyclef от 17 Августа 2003, 04:29:17
[off]на скорую руку...[/off]
perl ftree.pl > ftree.html

ftree.pl
----------
#!/usr/bin/perl -w

use strict;

ftree(\'[b]/folder[/b]\'); # Cодержимое заданной папки с поддиректориями в виде html-списка

sub ftree {
my $dir = shift;

print "
    ";
    print "
  • $dir";
    print "
      ";

      my @subdirs;
      opendir(DIR, $dir) or die "Folder $dir not found.\\n";
      while (defined($_ = readdir(DIR))) {
      next if /^\\.+?$/;
      my $entry = "$dir/$_";
          if (-d $entry) {
        push @subdirs, $entry;
        } else {
      print "
    • $entry";
      }
      }
      closedir(DIR);

      print "
    ";

    foreach (sort @subdirs) {
    ftree($_);
    }

    print "
";
}
Название: проблема с построением дерева каталогов
Отправлено: metton от 17 Августа 2003, 04:34:03
2Wyclef
Спасибо, конечно, за код, но я ведь просил не это - я просил найти ошибку в МОЁМ коде, потому как мне совсем не нужна эта программа - мне нужно понять что я не учёл.
Название: проблема с построением дерева каталогов
Отправлено: mike от 17 Августа 2003, 22:49:15
perldoc perldebug
Название: проблема с построением дерева каталогов
Отправлено: Chs от 18 Августа 2003, 00:19:44
Цитировать
opendir($d_name, $d_name)

лол,)
perldoc -f opendir
Название: проблема с построением дерева каталогов
Отправлено: metton от 19 Августа 2003, 18:43:02
2Chs
Сначала всё было нормально - стояло нормальное мя хэндлера... извращаться я начал после n-ной неудачной попытки заставить программу работать как надо...
А сие творение (opendir($d_name, $d_name)) я написал после того как понадобилось много разных хэндлеров... как это организовать?
Название: проблема с построением дерева каталогов
Отправлено: Chs от 19 Августа 2003, 19:26:11
Хендлер должен быть один, как впримере Wyclef