Если вы абсолютно уверены, что формат вашего XML никогда не изменится, что порядок атрибутов фиксирован, что вы действительно можете получить регулярное выражение для правильного числа ... тогда перейдите к решению, не основанному на парсере ,
Лично я бы использовал XML :: Twig (возможно, потому что я написал это; -). Он будет обрабатывать XML как XML, сохраняя при этом исходный формат файла, и не будет загружать все это в память перед началом работы.
Непроверенный код ниже:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new( # call the sub for each VALUE element with a DECIMAL_VALUE attribute
twig_roots => { 'VALUE[@DECIMAL_VALUE]' => \&upd_decimal },
# print anything else as is
twig_print_outside_roots => 1,
)
->parsefile_inplace( 'foo.xml');
sub upd_decimal
{ my( $twig, $value)= @_; # twig is the XML::Twig object, $value the element
my $decimal_value= $value->att( 'DECIMAL_VALUE');
$decimal_value += 0.4;
$value->set_att( DECIMAL_VALUE => $decimal_value);
$value->print;
}