IMG SRC="scooby.Jpg" ALT="Good doggy!" P>
BLINK>He's my hero! /BLINK I would like to meet him some day,
and get my picture taken with him.
P.S. I am deathly ill. A HREF="shergold.html">Please send
cards.
/BODYX/HTML>
Программа htmlsub заменяет каждый экземпляр слова "picture" в тексте документа на "photo". Новый документ выводится в STDOUT:
% htmlsub picture photo scooby.html
H1>Welcome to Scooby World!
I have A HREF="pictures.html">photos of the crazy dog
himself. Here's one!
IMG SRC="scooby.jpg" ALT="Good doggy! "xP>
BLINK>He's my hero! I would like to meet him some day,
and get my photo taken with him.
P.S. I am deathly ill. A HREF="shergold.html">Please send
cards.
/BODYX/HTML>
Исходный текст программы приведен в примере 20.11. Пример 20.11. htmlsub
#!/usr/bin/perl -w
# htmlsub - замена обычного текста в HTML-файле
# Автор - Джайсл Аас
sub usage { die "Usage: $0
my $from = shift or usage;
my $to = shift or usage;o usage unless @ARGV;
# Субклассировать HTML::Filter для выполнения подстановок.
package MyFilter;
require HTML::Filter;
@ISA=qw(HTML::Filter);
use HTML::Entities qw(decode_entities encode_entities);
sub text
{
my $selt = snirr, my $text = decode_entities($_[0]);
$text =~ s/\Q$from/$to/go; ft Самая важная строка
$self->SUPER::text(encode_entities($text));
}
# Now use the class.
package main;
foreach (OARGV) {
MyFilter->new->parse_file($_);
}20.15. Программа: hrefsub
Программа hrefsub выполняет подстановки в HTML-файлах так, что изменения относятся только к тексту в полях HREF тегов А HREF=" ...". Например, если в предыдущем примере scooby.html файл shergold.html был переименован в cards.html, достаточно сказать:
% hrefsub shergold.html cards.html scooby.html
HTMLXHEAD TITLE>Hi! /TITLEx/HEAD>BODY>
H1>Welcome to Scooby World!
I have A HREF="pictures.html">pictures of the crazy dog
himself, Here's one!
IMG SRC="scooby.jpg" ALT="Good doggy!">
BLINK>He's my hero! /BLINK> I would like to meet him some day,
and get my picture taken with him.
P.S. I am deathly ill. a href="cards.html">Please send
cards.
/BODY /HTML>
В странице руководства HTML::Filter есть раздел BUGS, в котором сказано:
"Комментарии в объявлениях удаляются, а затем вставляются в виде отдельных комментариев после объявления. Если включить strict_comment(), то комментарии с внутренними "-\| -" делятся на несколько комментариев".
Данная версия hrefsub при выполнении подстановки всегда преобразует <а> и имена атрибутов в теге в нижний регистр. Если строка $foo содержит несколько слов, то текст, передаваемый MyFilter->text, может быть разбит так, что эти слова разделятся и подстанов