водом строки. Эти модификаторы можно
Фильтр из примера 6.2 удаляет теги HTML из всех файлов, переданных в @ARGV, и отправляет результат в STDOUT. Сначала мы отменяем разделение записей, чтобы при каждой операции чтения читалось содержимое всего файла. Если @ARGV содержит несколько аргументов, файлов также будет несколько. В этом случае при каждом чтении передается содержимое всего файла. Затем мы удаляем все открывающие и закрывающие угловые скобки и все, что находится между ними. Мы не можем просто воспользоваться * по двум причинам: во-первых, этот шаблон не учитывает закрывающих угловых скобок, а во-вторых, он не поддерживает межстрочных совпадений Проблема решается применением *'в сочетании с модификатором /s — по крайней мере, в данном случае.
Пример 6.2. killtags
#'/usr/bin/perl
# killtags - очень плохое удаление тегов HTML
under" $/ # При каждом чтении передается весь файл
while (<>) { # Читать по одному файлу
s/< *?>//gs # Удаление тегов (очень скверное)
print # Вывод файла в STDOUT
>
Шаблон s/<[">]*>//g работает намного быстрее, но такой подход наивен: он приведет к неправильной обработке тегов в комментариях HTML или угловых скобок в кавычках (<IMG SRC= here gif ALT= <<0oh la la1» >). В рецепте 20 6 показано, как решаются подобные проблемы.
Программа из примера 6.3 получает простой текстовый документ и ищет в начале абзацев строки вида Chapter 20 Better Living Through Chemisery . Такие строки оформляются заголовками HTML первого уровня. Поскольку шаблон получился довольно сложным, мы воспользовались модификатором /х, который разрешает внутренние пропуски и комментарии.
Пример 6.3. headerfy
#Vusr/bm/perl
# headerfy оформление заголовков глав в HTML
$/ = |
|||
while ( <> |
) { |
# |
Получить абзац |
s{ |
|||
\A |
# |
Начало записи |
|
( |
# |
Сохранить в $1 |
|
Chapter |
# |
Текстовая строка |
|
\s+ |
Обязательный пропуск |
||
\d+ |
# |
Десятичное число |
|
\s* |
# |
Необязательный пропуск |
|
# |
Двоеточие |
||
* |
Все, кроме перевода строки, |
||
}{<H1>$K/H1>}gx, |
|||
print |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий