2011-10-24 29 views
2

我有一个XML ::基于基础SAX解析器::看起来是这样的:如何将参数传递给XML :: SAX解析器?

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

你打算对传递的参数做什么? – 2011-10-24 21:31:59

+0

我正在解析的XML文档实际上来自Ganglia的gmetad,我将它通过套接字推送到另一个监视系统(Graphite),所以我希望能够传入套接字。 –

回答

3

new方法已经被设置为接收使用%params,所以只是通过你的参数作为一个散列参数:

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

然后在您的new方法,你可以访问这些参数,就像任何其他的散列:

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

哈,我发誓我尝试过,并认为它不工作...容易peasy。 –