Теперь, когда список сформирован, осталось заполнить шаблон. Название каждой страницы
дается в виде гиперссылки, а не просто перечисляется по имени.
мой% пар;
$пар{тело} = $тело;
$par{title} = "Последние изменения";
$par{страница} = "http:changes.cgi";
open(T, 'template.html') или die "template.html: $!";
мой $nl = $/; неопределенный $/;
$_ = <Т>;
шкаф);
s/\$(\w+)/определено($par{$l}) ? $par{$l} : ''/гео;
Распечатать;
$/ = $nl;
На этом модуль изменений заканчивается, за исключением одной детали. Для производства
человекочитаемые даты, подпрограмма даты из более раннего должна быть продублирована в
этот модуль тоже.
суб мди {
мое $time = сдвиг @_;
my ($860,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime($ Λ Τ - ($time * 24. * 60 * 60));
мой $month = (' Январь', 'Февраль', 'Март', 'Апри1', 'Май', 'Июнь',
'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь ·)[$mon];
$year -·-= 1900, если $year < 1900;
РАЗБИРАЕМ QUICKIWIKI
223
return "$месяц $mday, $год";
}
В качестве альтернативы, если для содержания общего кода используется отдельный кодовый модуль, эта дата
section будет одной из таких общих подпрограмм.
Как и недавние изменения, поиск является фундаментальной частью функциональности.
Идет поиск
Вариант поиска, закодированный здесь, является основным. Он находит и перечисляет все заголовки страниц, где
шаблон найден по крайней мере один раз, но не дает дальнейшего контекста или указаний на то,
на странице больше совпадений. Дальнейшее уточнение поиска требует от пользователя
перейдите на страницу и вручную используйте поиск клиента, чтобы найти другие вхождения
внутри страницы.
поиск.cgi
#! /USR/бен/перл -w
#(c) 1999, Cunningham & Cunningham, Inc.
# в сотрудничестве с Дэйвом В. Смитом
# используйте строгий;
$ | ++;
print "Тип контента: text/html\n\n";
my $link = "[AZ][az]+([AZ][az]+)+";
После преамбулы запрос анализируется на наличие шаблона поиска.
my ($ target) = $ENV{QUERY_S-TRING} =~ /search= ([ Λ \&] * ) / ;
$target =~ s/\+/ /g;
$target =~ s/\%(..)/pack('C', hex($1))/geo;
мой $пат = $цель;
$пат
s/[ + ?.*() [ \ ] {} | \ \ ] / \ \ $&/г;
$pat = "\\b\\w*($pat)\\w*\\b";
$target =~s/"/"/g;
После некоторых корректировок формата для правильной обработки специальных символов результат
страница инициализируется другой формой поиска, настроенной на только что полученный шаблон.
мое $тело = <<EOF;
<форма action=search.cgi>
<input type="text" size="40" name="search" value="$target">
<input type="submit" value="Поиск">
</форма>
EOF
224
ИЗУЧЕННЫЕ КОМПОНЕНТЫ ВИКИ