Tem também o módulo XML::XPath. Imagine o seguinte XML:   <Biblioteca>
    <Livro ISBN="1234567" Ano="2000">
        <Paginas>300</Paginas>
        <Titulo>A arte de programar em meia-hora</Titulo>
        <Exemplares>
            <Codigo>1</Codigo>
            <Codigo>2</Codigo>
        </Exemplares>
    </Livro>
    <Livro ISBN="7654321" Ano="1710">
        <Paginas>500</Paginas>
        <Titulo>Aprenda a usar o ábaco em 21 dias</Titulo>
        <Exemplares>
            <Codigo>10</Codigo>
            <Codigo>20</Codigo>
            <Codigo>30</Codigo>
            <Codigo>40</Codigo>
        </Exemplares>
    </Livro>
</Biblioteca>
Ele seria facilmente lido com o módulo XPath da seguinte forma:
#!/usr/bin/perl
use XML::XPath;
my $inputFile = shift;
die("Faltou passar o nome do arquivo!") unless defined($inputFile);
my $xpath = XML:: XPath->new(filename => $inputFile);
my $nodeset = $xpath->find('//Biblioteca/Livro');
foreach my $context ($nodeset->get_nodelist) {
    my $isbn = $xpath->findvalue('@ISBN', $context);
    print "ISBN: $isbn\n";
    my $ano = $xpath->findvalue('@Ano', $context);
    print "Ano de Publicação: $ano\n";
    my $paginas = $xpath->findvalue('Paginas', $context);
    print "Quantidade de Páginas: $paginas\n";
    my $titulo = $xpath->findvalue('Titulo', $context);
    print "Título: $titulo\n";
    my $exemplares = $xpath->find('Exemplares/Codigo', $context);
    print "Exemplares disponíveis:\n";
    foreach my $newcontext ($exemplares->get_nodelist){
        my $codigo = $xpath->findvalue('.', $newcontext);
        print "\tCódigo: $codigo\n";
    }
}  Exemplo e código retirado de: http://perlbrasil.blogspot.com/2011/03/len...-com-xpath.html  Abraços.