use strict; use warnings; printf qq{%20s\n}, comma3($_) for (12, 1234, 1234567, 1234567890); sub comma3 { my $ct = 0; join q{}, reverse map {++ $ct % 3 ? $_ : ($_, q{,})} reverse split m{}, $_[0]; }