Я использую
$num =~ s/(\d) (?= (?:\d{3})+ \b )/$1,/gx;
, который просто добавляет запятую после каждой цифры, за которой следует число, кратное трем.
Если вместо этого вам нужна функция:
sub commify {
(my $num = $_[0]) =~ s/(\d) (?= (?:\d{3})+ \b )/$1,/gx;
$num;
}
print commify(10 ** $_), "\n" for 1 .. 14;
ВЫХОД
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000
10,000,000,000
100,000,000,000
1,000,000,000,000
10,000,000,000,000
100,000,000,000,000