my $pack = NCBIXML->new; $pack->createHandlers; my $parser = $pack->retrieve('HNDL'); $parser->parsefile($file); my %data = $parser->retrieve('RES'); ############## sub createHandlers { my $obj = shift; my $parser = new XML::Parser(ErrorContext=>2); $parser->setHandlers( Start => \&start_handler); $parser->setHandlers( End => \&end_handler); $parser->setHandlers( Char => \&char_handler); $obj->{'HNDL'} = $parser; } sub start_handler { my ($obj, $element, %attrs) = @_; $tag = $element; # primary key for the array $obj->{'TAG'} = $tag; } sub char_handler { my ($obj, $data) = @_; my $tag = $obj->retrieve('TAG'); my %info = $obj->retrieve('RES'); if ($tag eq 'Hit_num') { $key = $data; next; } $info{$key}{$tag} = $data; $obj->{'RES'} = \%info; }