Perl - статьи

       

Other


Вывод строк из заданного интервала для данной строки:

if(/pattern1/i .. /pattern2/i){...} #истинность первого оператора включает конструкцию, а второго е выключает. if($nomer1 .. $nomer2){...}

... не возвратит истину, в отличии от .., если условия выполняются в одной строке.

if(/pattern1/i ... /pattern2/i){...} if($nomer1 ... $nomer2){...}

для многострочного файла

print -ne 'print if 3 .. 15' file.txt

выведет строки файла с 3 по 15 строчку, та-же самая опреация но немного по другому:

open F, "<file"; while(<F>){ print if(3 .. 15) }

или с какой нибудь начальной и конечно разметкой, например есть вспомогательный файл шаблонов(просто различные виды html, в зависимости от действия пользователя) для разных определенны случаев, которые нужны исходя из контекста программы:

open F, "<file"; while(<F>){ print if(/<!--begin welcome-->/i ... /<!--end welcome-->/i) }

Такая конструкция позволяет выводить куски многострочного html кода(для однострочного нужно ставить оператор ..).

Условия в таких операторах можно ставить и разнотипными $file=qr/2345/; while(<F>){ print if(/^$/ .. 10); #увидим, что находится от пустой до 10-й строки print if(/^\001/ .. /$file/); #выведет все, что после нуля и до того что задано qr }

Программа чтения почтовых адресов из mbox или sent-mail: while(<F>){ next unless /^From:?\s/i .. /^$/; while (/([^<>(,;)\s]+\@[^<>(,;)\s]+)/)g{ print "$1\n" unless $test{$1}++; } }

запускается ./regex.pl /root/mail/sent-mail и выводит каждый емейл по одному разу.



Содержание раздела