Автор Тема: проблема с построением дерева каталогов  (Прочитано 3766 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн metton

  • access granted
  • Старожил
  • ****
  • Сообщений: 320
  • +0/-0
  • 2
    • Просмотр профиля
    • http://bluejack.ru/
Собственно, сабж.
Сразу оговорюсь для противников создания велосиподов: я делаю это чисто в целях практики и использоваться это не будет, так что не важна даже его эффективность. Просто в книжке, по которой я сейчас изучаю 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 в ПХП?

Спасибо.
« Последнее редактирование: 16 Августа 2003, 20:37:54 от metton »
 BlueJacking среди нас

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
проблема с построением дерева каталогов
« Ответ #1 : 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 "
";
}
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн metton

  • access granted
  • Старожил
  • ****
  • Сообщений: 320
  • +0/-0
  • 2
    • Просмотр профиля
    • http://bluejack.ru/
проблема с построением дерева каталогов
« Ответ #2 : 17 Августа 2003, 04:34:03 »
2Wyclef
Спасибо, конечно, за код, но я ведь просил не это - я просил найти ошибку в МОЁМ коде, потому как мне совсем не нужна эта программа - мне нужно понять что я не учёл.
 BlueJacking среди нас

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
проблема с построением дерева каталогов
« Ответ #3 : 17 Августа 2003, 22:49:15 »
perldoc perldebug
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
проблема с построением дерева каталогов
« Ответ #4 : 18 Августа 2003, 00:19:44 »
Цитировать
opendir($d_name, $d_name)

лол,)
perldoc -f opendir
2B OR NOT 2B = FF

Оффлайн metton

  • access granted
  • Старожил
  • ****
  • Сообщений: 320
  • +0/-0
  • 2
    • Просмотр профиля
    • http://bluejack.ru/
проблема с построением дерева каталогов
« Ответ #5 : 19 Августа 2003, 18:43:02 »
2Chs
Сначала всё было нормально - стояло нормальное мя хэндлера... извращаться я начал после n-ной неудачной попытки заставить программу работать как надо...
А сие творение (opendir($d_name, $d_name)) я написал после того как понадобилось много разных хэндлеров... как это организовать?
 BlueJacking среди нас

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
проблема с построением дерева каталогов
« Ответ #6 : 19 Августа 2003, 19:26:11 »
Хендлер должен быть один, как впримере Wyclef
2B OR NOT 2B = FF

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28