use strict ; use warnings ; foreach my $t (1234567, 123.4567, -123456, .123456, '.1234567', -10**1000) { printf "%12s -> oko1:%12s, faq:%12s\n", $t, commify($t), commify_faq($t) ; } ; sub commify { my ($s) = @_ ; my @list = () ; my $c = 0 ; for (reverse split //, $s){ unshift @list, $c++ % 3 || $c == 1 ? $_ : "$_,"; } ; return join '', @list ; } ; sub commify_faq { local $_ = shift ; 1 while s/^([-+]?\d+)(\d{3})/$1,$2/ ; return $_ ; } ;