use strict; use warnings; use XML::Parser; sub new { my ($class, %params) = @_; my $self = bless \%params, $class; my $parser = XML::Parser->new( Handlers => { Start => sub {$self->startElement(@_);} } ); $parser->parse(*DATA); return $self; } sub startElement { my ($self, $parseinst, $element, %attrs ) = @_; return if $element ne $self->{id}; $self->{Property} = $attrs{Property}; } my $obj = main->new(id => 'child'); print $obj->{Property}; __DATA__