|
|||||||||
Проверка: если ли в файле обе искомые строки. Нам необходимо определить, если ли в файле обе строки текста 'george' and 'judy'?
Соль этого фрагмента в использовании операторов ||= (ИЛИ-присвоение) и & (побитовый
И). Программа считывает файл по строкам в переменную $_ оператором <>. Как
только встретится строка 'george', переменной $s1 будет присвоено значение 1 (истина).
Не забывайте, что оператор $s1 ||= /george/ означает то же, что и $s1 = $s1 ||
/george/ -- как только $s1 примет значение ИСТИНА, программа больше не будет делать
проверку на строку /george/. $s2 ||= /judy/ работает подобным образом. Программа
закончит свое выполнение как только обе переменные $s1 и $s2 получат значение
ИСТИНА.
Интересный момент заключается в использовании оператора побитовое И (&) вместо
логического И (&&). Левый и правый аргументы оператора & всегда выполняются
в отличие от &&. Этот код просто не будет работать, если использовать
оператор && и файл содержит строку 'judy' перед строкой 'george'. Конечно,
нельзя всегда заменять оператор && на &, но в данном случае это необходимо.
Автор: Joseph N. Hall Проверка: если ли в файле все необходимые нам слова.
Это совершенно другой подход. Мы начинает с того, что создаем анонимные функции,
каждая из которых возвращает ИСТИНА, когда ее аргумент совпадает с одним из искомых
слов. Ссылки на функции хранятся в массиве @match. Затем, для каждой строки входного
файла, мы запускаем по циклу все функции. Если функция не нашла совпадения (искомое
слово остутствует) мы сохраняем ссылку на эту функцию в другом массиве @left_to_match
- они будут работать над следующими строками исходного файла. Когда все функции
сработают, в массиве @left_to_match ничего не останется и программа завершится.
В противном случае будет выдано диагностическое сообщение.
Автор: Joseph N. Hall
|
|||||||||
![]() |
![]() |