sub commas { my $num = shift; my $f = ''; while ( my ($r, $m) = $num =~ m/([0-9]+)([0-9]{3})$/ ) { $f = $r ? ",$m$f" : "$m$f"; $num = $r; } return "$num$f"; } printf("%s\n",commas(12345678)); # 12,345,678