Perl для системного администрирования


Создание системы учетных записей для работы с пользователями - часть 9


Теперь посмотрим на подпрограммы, выполняющие функции обработчика событий. Рассмотрим их по очереди:

package Account::Parse:

sub StartTag ,

idef %rccorj : f ($_M1 eq "account"):

&StartTag() вызывается каждый раз, когда встречается открывающий тег. Эта функция вызывается с двумя параметрами: ссылкой на объект и именем встреченного тега. Поскольку для каждой учетной записи будет создаваться новая запись в хэше, можно использовать StartTag0, чтобы обозначить начало новой записи (например, открывающий тег <account>). В этом случае удаляются значения из существующего кэша. Во всех остальных случаях мы возвращаемся, ничего не выполняя:

sub Text {

my $ce = $_[0]->current_element();

$record{$ce}=$_ unless ($ce eq "account");

На этот раз мы используем &Text() для заполнения кэша %record. Как и предыдущая функция, она тоже получает два параметра при вызове: ссылку на объект и «накопленный неразмеченный текст», который анализатор нашел между последним открывающим и закрывающим тегом. Для определения элемента, в котором мы находимся, используется метод current_element(). В соответствии с документацией по XML::Parser: :Expat этот метод «возвращает имя внутреннего элемента, открытого в данный момент». То обстоятельство, что имя текущего элемента не «account», гарантирует нам, что мы находимся внутри одного из подэлементов в <account>, поэтому можно записать имя элемента и его содержимое:

sub EndTag {

print Data::Dumper->Dump([\%record], ["account"]) if ($_[1] eq "account");

И именно сейчас мы должны сделать что-то конкретное вместо

# того, чтобы просто печатать запись

}

Наш последний обработчик, &EndTag(), очень похож на первый &StartTag() с тем лишь исключением, что он вызывается тогда, когда мы находим закрывающий тег. Если мы дойдем до конца соответствующей учетной записи, то сделаем банальную вещь и напечатаем эту запись. Вот как может выглядеть такой вывод:

Saccount = {

'login' => 'bobf




- Начало -  - Назад -  - Вперед -



Книжный магазин