package MyHandler; sub new { bless { indent => 0 }, shift } sub handle_start { my ($self, $p, $el, %atts) = @_; # use $self->{indent} here ... } sub handle_end { my ($self) = @_; # likewise here ... } 1; ... use XML::Parser; use strict; sub parse_stuff { my $handler = MyHandler->new(); my $parser = new XML::Parser(Handlers => { Start => sub { $handler->handle_start(@_) }, End => sub { $handler->handle_end(@_)}); $parser->parsefile('/tmp/ra.xml'); }