В следующем примере сценарий get_url2.pl применяется для получения начальной страницы машины поиска Google и передачи вывода этого сценария по каналу в сценарий print_links.pl. С помощью данного сценария можно осуществлять поиск различной информации, к примеру, узнать цены на телефоны Нокиа в вашем регионе или последние новости мобильной связи и технологий.
0: #!/usr/local/bin/perl -w 1: # Файл: print_links.pl 2: use strict; 3: use HTML::Parser; 4: my $parser = HTML::Parser->new(api_version -> 3); 5: $parser->handler(start => &print_link, ‘tagname,attr’); 6: $parser->parse($_) while <>; 7: $parser->eof; 8: sub print_link { 9: my ($tagname , $attr) = @_; 10: if ($tagname eq 'ar ') { 11: print "link: ", $attr->{href}, "n" 12: } elsif ($tagname eq 'img') { 13: print 'img: ',$attr->{src}/"n"; 14: } 15: }
Проведем анализ программы.
Строки 1-3. Загрузка модуля. После включения строгой проверки синтаксиса загружается модуль HTML::Parser. Это — единственный необходимый здесь модуль.
Строки 4, 5. Создание и инициализация объекта синтаксического анализатора. Создается новый объект HTML::Parser путем вызова его метода new(). По причинам, описанным в следующем разделе, методу new () в виде параметра api_version передается указание использовать версию 3 API-интерфейса.
После создания синтаксического анализатора выполняется его настройка путем вызова метода handler () для установки обработчика событий, связанных с появлением начального тега. Параметр start содержит ссылку на подпрограмму print_link(); эта подпрограмма вызывается при обнаружении синтаксическим анализатором каждого начального тега. Следующий параметр метода handler () сообщает модулю html::Parser, какие параметры должны передаваться обработчику событий при его вызове. В этом параметре содержится требование, чтобы синтаксический анализатор передавал подпрограмме print_link() имя тега (tagname) и ссылку на хеш, содержащий атрибуты тега (attr).