Вот часть его (нерабочая):
#! /usr/bin/perl -w
#
use strict;
use warnings;
my $dir;
my @dirs;
my @all;
my $tmplist;
my @files;
my $tmpfiles;
my @rights;
my $login;
my $pass;
my $uid;
my $gid;
$dir = "/srv/www/site/texts";
($login, $pass, $uid, $gid) = getpwnam("apache");
opendir DIR, $dir or die "open $dir failed: $!";
open (DL, ">$dir/CatList") or die "open CatList failed: $!";
@all = grep {!/^\\./ and !/^\\.\\./} readdir DIR; # тут не работает
# @all = readdir DIR; # пробовал и так писать, в таком случае в @all будут . и ..
@all = sort @all;
foreach $tmplist (@all)
{
print(DL "$tmplist\\n") if -d $tmplist;
}
close DL or die "close CatList failed: $!";
@rights = ($uid, $gid, "$dir/Catlist");
chown(@rights);
closedir DIR or die "close $dir failed: $!";
Остальную часть приводить нет смысла, т.к. до нее даже не доходит (CatList создается, но пустой).
Скрипт весь раскатан, т.к. в первоначальном варианте тяжело было ошибку выискивать, поэтому не надо советов по оптимизации всего в пару строк, надо ошибку найти.