Несколько файлов секретных слов в текущем каталоге
Давайте вместо файла 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 .
<< Предыдущая страница Содержание Наверх Следующая страница >>
2000,
"Язык Perl. Создание CGI-скриптов на Perl."
. Использованы материалы книг:
Маслов
В.В.
Основы программирования на языке Perl
- М.: Радио и связь, Горячая линия - Телеком. 1999. - 144 c.: - ISBN
5-256-01356-4; Рэндал Шварц, Том Кристиансен
Изучаем Perl
: Пер. с англ. - К.:
Издательская группа BHV, 1998 - 320 c.: - ISBN 5-7315-0031-2.
Все пожелания - авторам:
Алексею Машьянову
,
Александру Яковлеву
.