in reply to Building XML Index File

With this data you can use the following code, which is quite optimized to use the least possible memory, just in case you have _LOTS_ of friends ;--):

#!/usr/bin/perl -w use strict; use XML::Twig; # initialize the index document # pretty_print => 'indented' gives you exactly the output you showed my $index= XML::Twig->new( pretty_print => 'record_c') ->parse( '<friends/>'); my $friends= $index->root; foreach my $file (@ARGV) { my $friend; # the current friend my $t= XML::Twig->new( start_tag_handlers => { # create a new friend in the inde +x person => sub { $friend= $friends +->insert_new_elt( last_child => 'person') } }, twig_roots => { # store the elements in the frien +d 'person/name' => sub { $_->move( +last_child => $friend); }, 'person/age' => sub { $_->move( +last_child => $friend); } } ) ->parsefile( $file); } $index->print;