我有一个基于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/>');
有没有办法可以将参数传递给MyParser的new()子程序?
答案 0 :(得分:3)
您的new
方法已设置为使用%params
接收参数,因此只需将参数作为哈希传递:
my $parser = XML::SAX::ParserFactory->parser(
Handler => MyParser->new(param1=>$value1, param2=>$value2, ...)
);
然后在您的new
方法中,您可以像访问任何其他哈希一样访问参数:
$param1 = $params{param1};
$param2 = $params{param2};
...