(contributo di brian d foy e Benjamin Goldberg)
[a differenza dell'Italia, nei paesi anglosassoni, il separatore delle
migliaia è la virgola mentre quello dei decimali è il
punto, NdT]
Potete utilizzare Number::Format per separare il numero in porzioni più piccole.
Gestisce correttamente il locale, per quelli fra voi che vogliano inserire dei punti
(o qualsiasi altra cosa vi chiedano di usare, veramente).
Questa subroutine aggiungerà le virgole al vostro numero:
sub virgolante {
local $_ = shift;
1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
return $_;
}
Questa espressione regolare di Benjamin Goldberg, aggiungerà virgole ai numeri:
s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g;
È più semplice vederla con i commenti:
s/(
^[-+]? # l'inizio del numero.
\d+? # la prima cifra prima della prima virgola
(?= # seguita da, (ma non incluso nel match):
(?>(?:\d{3})+) # alcuni multipli positivi di tre cifre.
(?!\d) # un multiplo *esatto*, non x * 3 + 1 o quant'altro.
)
| # oppure:
\G\d{3} # dopo l'ultimo gruppo, prendi 3 cifre
(?=\d) # ma devono avere altre cifre dopo di loro.
)/$1,/xg;
|