Как передать аргументы в синтаксический анализатор XML :: SAX? - PullRequest
2 голосов
/ 25 октября 2011

У меня есть синтаксический анализатор XML :: SAX :: Base, который выглядит примерно так:

package MyParser;
use base qw(XML::SAX::Base);
our @ISA = ('XML::SAX::Base');

sub new {
    my $class = shift;
    my %params = @_;

    my $self = {
        thing   => $params{thing},
    };
    bless $self, $class;

    return $self;
}

sub start_element {
    my ($self, $data) = @_;
    # Do something useful using $data & $self->{thing}
}
1;

И я использую его с XML :: SAX :: ParserFactory:

#!/usr/bin/env perl
use MyParser;

my $parser = XML::SAX::ParserFactory->parser(
                Handler => MyParser->new
            );
$parser->parse_string('<document/>');

Есть ли способ передать аргументы в функцию new () MyParser?

1 Ответ

3 голосов
/ 25 октября 2011

Ваш метод new уже настроен на получение аргументов с использованием %params, поэтому просто передайте свои аргументы как хеш:

my $parser = XML::SAX::ParserFactory->parser(
            Handler => MyParser->new(param1=>$value1, param2=>$value2, ...)
        );

Затем в вашем методе new вы можете получить доступ к аргументам, как и к любому другому хешу:

$param1 = $params{param1};
$param2 = $params{param2};
...
...