Как я могу сделать простой парсер браузера в Perl? - PullRequest
4 голосов
/ 04 октября 2010

Мне нужно было сделать простой парсер браузера на Perl.Я нашел код PHP, который делает это, но мои знания довольно ограничены (особенно в регулярных выражениях).Итак, вот код, Perl-эквивалент которого я хочу написать.

if ($l = ereg($pattern, $agent, $a = array()))
        {
          array_push($found, array("product" => $a[1], "version" => $a[3], "comment" => $a[6]));
          $agent = substr($agent, $l);
        }

$ agent - это строка user-agent, передаваемая в качестве аргумента, и возвращает массив найденных ассоциативных массивов $, каждый из которых определяетproduct / comment в строке агента (ключом ассоциативного массива являются product, version, comment).$ Pattern - это регулярное выражение пользовательского агента, которое я ищу, и которое я уже знаю.

Итак, как бы это выглядело в Perl?

Редактировать: Похоже, что естьпутаница в том, хочу ли я Perl-совместимое регулярное выражение или эквивалентную функцию в Perl.Я ищу функцию Perl и синтаксис, который делает то же самое.

Ответы [ 3 ]

10 голосов
/ 04 октября 2010

Вы можете использовать CPAN-модуль HTTP::BrowserDetect, чтобы узнать различную информацию о браузере и устройстве, на котором он работает, включая, помимо прочего, версию, механизм и поставщика.

1 голос
/ 04 октября 2010

Ваш PHP-скрипт может быть написан на Perl как:

my @found;
if ($agent =~ s/$pattern//) {
  push @found, {product => $1, version => $3, comment => $6};
}

Для того, чтобы напечатать содержимое массива @found:

use Data::Dumper;
print Dumper(\@found);
0 голосов
/ 04 октября 2010

Использование POSIX (ereg _ *) устарело с PHP 5.3.0. Если вы используете функции PCRE (preg _ *) , они также будут работать в Perl. PCRE - это сокращение от Perl Compatible Regular Expressions. Если вам нужна помощь в переписывании шаблона для PCRE, опубликуйте оригинальный шаблон.

...