Forum Webscript.Ru
Программирование => Perl => Тема начата: от 25 Января 2002, 11:31:38
-
Столько уже скриптов написал за свою жизнь! Всё получалось и сложное и не очень! А вот простой преметив решить что-то не могу! (За книгой в лом пока идти) Вообщемнужно просканить директорию и показать юзеру все диры которые есть в текущей дире. (Файлов не надо)! Как вывести все файлы я знаю глобом можно. А мне надо именно дериктории и больше ничего! Прешите кусок плиз.... Чтоб мне в книгу не лезть!
-
opendir(D,\'.\');
@all=readdir D;
closedir(D);
@dirs;
foreach $elem(@all)
{
if($elem =~ m/(\\.){1,2}/)
{
next;
}
if(-d $elem)
{
push @dirs,$elem;
}
}
И всё. В @dirs - директории
-
if($elem =~ m/(\\.){1,2}/)
{
next;
}
:):) Одна из самых распространенных ошибок - игнорируются директории (файлы) содержащие в названии точку.
-
А надо ^\\. ? (заодно будет прятать hidden файлы)
-
А надо ^\\. ?
ведь директория может быть и такой:
.dir
просто
if($elem =~ m/(\\.){1,2}/)
{
next;
}
можно смело выкинуть. Очевидно, чел-к хотел (помимо файлов) отсеять . и ..
можно было это сделать вначале:
(undef, undef,@all)=readdir D;
-
Спасибо вам! Но ваш код показывает лишь последнюю папку! Но это не важно.Там видно просто ошибка в цикле! Я уже сделал алгоритм(вернее взаимствовал) он более сложнее но работает как часы! Вот он!
opendir (DIR, $directory) or &cgierr ("Не возможно открыть папку: \'$directory\'.\\nСообщение: $!");
my @ls = readdir(DIR);
closedir (DIR);
FILE: foreach $file (@ls) {
next FILE if ($file eq \'.\');
next FILE if ($file eq \'..\');
$fullfile = "$directory/$file";
if (-d $fullfile ) {
$directory{$file} .= qq~$file\\n~;
}
}
foreach (sort keys %directory) {
push (@dirs,$directory{$_});
}
Вот вроде этого!
Будут предложения по улучшению! Пишите я всё учту!
Да и есть у кого-нибудь хороший чат с внешними настройками?
Всем спасибо! Пока!
-
#!/usr/bin/perl
my $dir=\'/home\';#путь к директории
my (@in_dir, @dirs);
opendir (DIRS, $dir)||die("Can not opendir, reason $!");
(undef,undef, @in_dir)=readdir(DIRS);
closedir DIRS;
foreach my $elm(@in_dir){
if (-d "$dir/$elm"){push(@dirs, $elm);}
}
print @dirs;