Автор Тема: perl, странно себя ведет readdir  (Прочитано 2880 раз)

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

Оффлайн scsi_rdx

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl, странно себя ведет readdir
« : 12 Июля 2005, 13:37:48 »
Есть простой скриптик на perl, где среди прочего создается список директорий. Делается с помощью readdir.
На одной машине все отрабатывает нормально и в массиве получаем необходимое, на другой только . и .., хотя если выполнить ls или ls | grep / , то получи список каталогов.
В чем собака порылась?
В обоих случаях ОС - linux.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
perl, странно себя ведет readdir
« Ответ #1 : 12 Июля 2005, 13:39:41 »
скриптик в студию.
The documentations is your friend

Оффлайн scsi_rdx

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl, странно себя ведет readdir
« Ответ #2 : 12 Июля 2005, 14:06:41 »
Вот часть его (нерабочая):
#! /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 создается, но пустой).
Скрипт весь раскатан, т.к. в первоначальном варианте тяжело было ошибку выискивать, поэтому не надо советов по оптимизации всего в пару строк, надо ошибку найти.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
perl, странно себя ведет readdir
« Ответ #3 : 12 Июля 2005, 14:26:50 »
foreach $tmplist (@all)
{
print $tmplist; #Уверен что это директория (;
print(DL "$tmplist\\n") if -d $tmplist;
}
The documentations is your friend

Оффлайн scsi_rdx

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl, странно себя ведет readdir
« Ответ #4 : 12 Июля 2005, 15:45:34 »
Разобрался :) (как вредно делать работу ночью).
Он путь не находил, т.к. chdir не сделан или как вариант:
my $res = "$dir"."/"."$tmplist";
print(DL "$tmplist\\n") if -d $res;

На другом компе работало, т.к. тестировалось на домашней директории.

 

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