stones.gif (8081 байт)

Несколько файлов секретных слов в текущем каталоге

Давайте вместо файла wordlist будем использовать все находящиеся в текущем каталоге файлы с расширением .secret . Еще раз вернемся к определению подпрограммы init_words() :

sub init_words {
   while (defined($filename = glob("*.secret")) ) {
      open (WORDSLIST, $filename) || die "Не могу открыть wordlist: $!";
      if (-M WORDSLIST <= 7.0) {
         while ($name = <WORDSLIST>) {
             chomp $name;
             $word = <WORDSLIST>;
             chomp $word;
             $words{$name) = $word;
         }
      }
      close (WORDSLIST) || die "Не могу закрыть wordlist: $!";
    }
}

Cначала мы поместили в новый цикл while основную часть подпрограммы из предыдущей версии. Новый элемент здесь - функция glob . По историческим причинам она называется filename glob . Эта функция работает почти так же, как <STDIN> : при каждом обращении к ней она возвращает очередное значение из списка имен файлов, в данном случае *.secret . Если таких имен файлов нет, возвращается пустая строка.

Таким образом, если текущий каталог содержит файлы fred.secret и barney.secret , то при первом выполнении цикла while значением переменной $filename будет barney.secret (имена даются по алфавиту). При втором выполнении цикла значением $filename будет fred.secret . Поскольку при третьем вызове функции glob она возвращает пустую строку, то третий проход не делается, так как цикл while интерпретирует это значение как ложь , что приводит к выходу из подпрограммы.

В ходе выполнения цикла while мы открываем файл и проверяем, достаточно ли давно он обновлялся (с момента последнего изменения должно пройти не более семи дней). С этими достаточно новыми файлами мы работаем так же, как и раньше.

Отметим, что в отсутствие файлов, имена которых совпадали бы с шаблоном *.secret и "возраст" которых не превышал бы семи дней, подпрограмма завершится, не поместив ни одного секретного слова в массив %words . Это значит, что всем придется пользоваться словом groucho .

<< Предыдущая страница Содержание Наверх Следующая страница >>

stones.gif (8081 байт)
2000, "Язык Perl. Создание CGI-скриптов на Perl." . Использованы материалы книг: Маслов В.В. Основы программирования на языке Perl - М.: Радио и связь, Горячая линия - Телеком. 1999. - 144 c.: - ISBN 5-256-01356-4; Рэндал Шварц, Том Кристиансен Изучаем Perl : Пер. с англ. - К.: Издательская группа BHV, 1998 - 320 c.: - ISBN 5-7315-0031-2.
Все пожелания - авторам: Алексею Машьянову , Александру Яковлеву .