Я бы просто скопировал данные между тегами <message></message>
и затем проанализировал бы эту строку, предполагая, что содержимое каждого сообщения невелико:
#!/usr/bin/perl
use strict; use warnings;
use XML::Simple;
use Data::Dumper;
my $in_message;
my $message;
LOGENTRY:
while ( my $line = <DATA> ) {
while ( $line =~ /^<message/ .. $line =~ m{</message>$} ) {
$message .= $line;
next LOGENTRY;
}
if ( $message ) {
process_message($message);
$message = '';
}
}
sub process_message {
my ($message) = @_;
my $xml = XMLin(
$message,
ForceArray => 1,
);
print Dumper $xml;
}
__DATA__
ldksj
lskdfj
lksd
sdfk
<message sender="1">Hi</message>
sdk
dkj
<message sender="2">Hi yourself!</message>
sd
Вывод:
$VAR1 = {
'sender' => '1',
'content' => 'Hi'
};
$VAR1 = {
'sender' => '2',
'content' => 'Hi yourself!'
};