PERL - Полезные советы
Проверка: если ли в файле обе искомые строки. Нам необходимо определить, если ли в файле обе строки текста '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 |