Глядя на ваш фрагмент, похоже, что у вас есть XML, разделенный 'number ='. Так что извлеките с помощью split:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
local $/;
my @xml_chunks = split ( /\d+\=/, <> );
print Dumper \@xml_chunks;
Конечно, вы, вероятно, должны заметить - ваш XML ... нет. Декларация недействительна. Я собираюсь предположить, что это ошибка транспонирования. Но это должно быть примерно таким:
<?xml version="1.0" encoding="utf-8"?>
Таким образом, с вашими образцами данных это будет разумным приближением к исправлению XML (при условии, конечно, что он недействителен).
#!/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;
}
Я бы просто поместил это в /etc/rc.local
вместо:
umask 0222 && mkdir -p /tmp/u/
Создавать сервис вокруг этого кажется слишком сложным.