Olhando para o seu snippet, parece que você delimitou o XML por 'number ='. Então extraia com split:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
local $/;
my @xml_chunks = split ( /\d+\=/, <> );
print Dumper \@xml_chunks;
Claro, você provavelmente deve notar - seu XML ... não é. A declaração não é válida. Eu vou assumir que é um erro de transposição. Mas deve ser algo como:
<?xml version="1.0" encoding="utf-8"?>
Portanto, com seus dados de exemplo, isso fará uma aproximação razoável da correção do XML (supondo, é claro, que não seja válido).
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
use Data::Dumper;
local $/;
my @xml_chunks = split( /\d+\=/, <DATA> );
print Dumper \@xml_chunks;
foreach my $chunk ( grep {/xml/} @xml_chunks ) {
$chunk =~ s/^<[^>]+>//;
my $twig = XML::Twig->new( pretty_print => 'indented_a' );
$twig->parse($chunk);
$twig->set_encoding('utf-8');
$twig->set_xml_version('1.0');
$twig->root->set_att( 'xmlns', 'http://www.some_ns.com' );
$twig->print;
}