Perl помогите разобраться с HTML::Parser

Гуглил, читал, примеры смотрел, но принцип работы парсера не понимаю...

sub title_handler {
    my $self = shift;
    $self->handler(text => sub { print @_ }, "dtext");
    $self->handler(end  => "eof",            "self");
}

my $p = HTML::Parser->new(
    api_version => 3,
    start_h     => [\&title_handler, "self"],
    report_tags => ['title'],
);

К примеру этот код выводит тайтл, но как его переработать чтобы он дополнительно показывал все теги h2?


Ответы (1 шт):

Автор решения: Vadim N.

В принципе, не сложно. Только, надо понимать, что такое callback-функция. В данном примере callback-функции регистрируются дважды:

 $self->handler(text => sub { print @_ }, "dtext");
...
 start_h     => [\&title_handler, "self"],

Вообще надо выяснить, какие параметры принимают эти функции. Тогда будет ясно, в какую из них добавить логику для имени тега tytle или h2.

Похоже, что в самом простом виде достаточно дополнить список тегов вторым тегом, и существующий обработчик (callback-функция sub { print @_ }) будет тупо печатать текст из обоих тегов:

т.е. попробовать в массив

report_tags => ['title'],

добавить второй тег

report_tags => [qw(title h2)],

→ Ссылка