Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 в ПХП?
Спасибо.
-
[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 "
";
}
-
2Wyclef
Спасибо, конечно, за код, но я ведь просил не это - я просил найти ошибку в МОЁМ коде, потому как мне совсем не нужна эта программа - мне нужно понять что я не учёл.
-
perldoc perldebug
-
opendir($d_name, $d_name)
лол,)
perldoc -f opendir
-
2Chs
Сначала всё было нормально - стояло нормальное мя хэндлера... извращаться я начал после n-ной неудачной попытки заставить программу работать как надо...
А сие творение (opendir($d_name, $d_name)) я написал после того как понадобилось много разных хэндлеров... как это организовать?
-
Хендлер должен быть один, как впримере Wyclef