This version works with decimals : DB<1> $_=1234567.7891; DB<2> s/\B(?=(...)*\.)/ /g
DB<3> print; 1 234 567.7891 Bour9 -----Message d'origine----- De : Terje Kristensen [mailto:[EMAIL PROTECTED] Envoyé : mardi 29 août 2006 07:40 À : 'Fun with Perl' Objet : SV: Super regexp to format numbers Here's the golfed version :) ( borrowed from Rick Klements solution to the TPR(0,5b) contest ). s/\B(?=(...)*$)/ /g Terje K p.s. This works on integers only. -----Opprinnelig melding----- Fra: Alexandre Jousset [mailto:[EMAIL PROTECTED] Sendt: 28. august 2006 18:14 Til: Fun with Perl Emne: Super regexp to format numbers Hello list, I have a problem that I've solved with some logic and a few lines of code but I'm sure that there is a good regexp that can do the job. So I ask the regexp gurus of this list whether they have a solution. Let's start with this : ---------------------------------------------------- $number = 12345678.1234 $number =~ s/./,/; # change decimal point to French notation spacify($number); # Do the magic print "$number\n"; ---------------------------------------------------- and this should print : 12 345 678,1234 For the moment I have a (too) complicated sub spacify and I would like to simplify it to a regexp. Is this possible ? How ? Of course we can use this to output the number in English notation like '12,345,678.1234', same thing... Any clue ? I'm sure this is an old problem... Regards, -- -- \^/ -- -- -/ O \--------------------------------------- -- -- | |/ \| Alexandre (Midnite) Jousset | -- -- -|___|--------------------------------------- --
