Bienvenido a los foros de Perl en Español, Felurian.
Lo que ocurre es que Perl no sabe qué quieren decir las comas y los puntos, ya que esos son caracteres que dependen de la configuración regional de cada país.
Por defecto, Perl sigue la configuración regional básica del sistema POSIX, por lo que entenderá que algo es un número si tiene como separador decimal el '.' y no contiene agrupaciones de millares. Por ejemplo:
3456850.00 (más información en
perlnumber).
Habría una solución que sería interpretar los números según la configuración regional en la que vienen, usando POSIX y las funciones setlocale() y strtod, pero quedaría larga, y además, no tendría en cuenta los casos de agrupación de millares, como se comenta en la sección "La función localeconv" de
perllocale.
Casi mejor, por ser más claro y rápido, hacer lo que propones:
Using perl Syntax Highlighting
#!/usr/bin/env perl
use v5.10;
my @cantidades = qw(223.790,92 1.225,00 3.567.833,00);
my $total;
for (@cantidades) {
tr/.//d; # quitamos los separadores de millares
tr/,/./; # convertimos el separador decimal a '.'
say; # mostramos resultado de la conversión
$total += $_;
}
say $total; # 3792848,92
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
A propósito, en Español, los números se formatean siguiendo estas reglas:
- el separador decimal puede ser, indistintamente, el punto o la coma
- el separador de grupos de millares, es un "breve espacio en blanco", que en HTML podría ser la entidad   o, más sencillo, un simple espacio en blanco.