The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблемы с PERL"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблемы с PERL"
Сообщение от Agp emailИскать по авторуВ закладки(ok) on 09-Апр-04, 12:12  (MSK)
Здравствуйте
Объясните пожалуйста как perl думает:
Задача прочитать файл с листингом и вывести сначала все файлы, затем все каталоги:
Имеется файл listing.txt:
---------------------------------------
/var/www/html
/var/www/html/manual
/var/www/html/manual/bind.html.en
/var/www/html/manual/bind.html.fr
---------------------------------------
Есть такая прога:
---------------------------------------
#!/usr/bin/perl -w
use strict;
for (my $i=0; $i<=1; $i++) {
open (FILES, "< listing.txt") || die "Can't open file, $!";
   while (<FILES>) {
        chomp;
        if (-d) {
                next unless $i;
                print "dir $_\n";
        } else {
                next if ($i);
                print "file $_\n";
        }
   }
close FILES;
}
---------------------------------------
Всё работает, а если вынести чтение файла из цикла (чтобы несколько раз не читать), то печатает только файлы, а каталоги нет. Почему?
---------------------------------------
#!/usr/bin/perl -w
use strict;
open (FILES, "< listing.txt") || die "Can't open file, $!";
for (my $i=0; $i<=1; $i++) {
   while (<FILES>) {
        chomp;
        if (-d) {
                next unless $i;
                print "dir $_\n";
        } else {
                next if ($i);
                print "file $_\n";
        }
   }
}
close FILES;
---------------------------------------
?
Спасибо!
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Проблемы с PERL"
Сообщение от alchie Искать по авторуВ закладки(ok) on 09-Апр-04, 13:03  (MSK)
>Здравствуйте
>Объясните пожалуйста как perl думает:
>Задача прочитать файл с листингом и вывести сначала все файлы, затем все
>каталоги:
>Имеется файл listing.txt:
>---------------------------------------
>/var/www/html
>/var/www/html/manual
>/var/www/html/manual/bind.html.en
>/var/www/html/manual/bind.html.fr
>---------------------------------------
>Есть такая прога:
>---------------------------------------

#!/usr/bin/perl -w
use strict;
open (FILES, "< listing.txt") || die "Can't open file, $!";
my (@dirs,@files);
while (<FILES>) {
  if (-d $_) {
      push @dirs, $_ ;
  } else {
      push @files, $_;
  }
}
close FILES;
print @files;
print @dirs;

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Проблемы с PERL"
Сообщение от ACCA Искать по авторуВ закладки(ok) on 29-Апр-04, 00:00  (MSK)
>Всё работает, а если вынести чтение файла из цикла (чтобы несколько раз
>не читать), то печатает только файлы, а каталоги нет. Почему?

А потому, что ты так захотел.

На первом проходе for $i = 0, то есть ты игнорируешь все каталоги -  next unless $i;

В цикле while ты дочитываешь файл до конца и после этого уходишь на следующий оборот for. Внутрь while ты не попадаешь, так как eof(FILES) = 1.

Ну и кто тебе Буратино?

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру