Si está absolutamente seguro de que el formato de su XML nunca cambiará, que el orden de los atributos es fijo, que efectivamente puede obtener la expresión regular para el número correcto ... luego opte por la solución no basada en el analizador.
Personalmente, utilizaría XML :: Twig (tal vez porque lo escribí; -). Procesará el XML como XML, sin dejar de respetar el formato original del archivo, y no lo cargará todo en la memoria antes de comenzar a trabajar.
código no probado a continuación:
#!/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;
}
Creo que quieres decir "($ 2 + 0,4)" no "($ 2 * 0,4)". –
Sí, soy estúpido. Lo arreglaré de inmediato. – PEZ