Нужно составить регулярное выражение, которое будет расставалять разделитель разрядов в число, т.е. 1234567890 преобразует в 1 234 567 890.$s =~ s/(...)/\ $1/g работает только, если число цифр кратно трем :(
>Нужно составить регулярное выражение, которое будет расставалять разделитель разрядов в число, т.е.
>1234567890 преобразует в 1 234 567 890.
>
>$s =~ s/(...)/\ $1/g работает только, если число цифр кратно трем :(
>perldoc Number::Format
$s=reverse $s;
$s=~s/(\d{3})(?=.)/$1 /g;
$s=reverse $s;
>Нужно составить регулярное выражение, которое будет расставалять разделитель разрядов в число, т.е.
>1234567890 преобразует в 1 234 567 890.
>
>$s =~ s/(...)/\ $1/g работает только, если число цифр кратно трем :(
>
Perl Cookbook, 2.17, стр. 89sub commify {
my $text = reverse $_[0];
$text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
return scalar reverse $text;
}
print commify(3.1415926535897932 * 1000000);
Свой вариант:
$s = 3.1415926535897932 * 1000000;
1 while $s =~ s/(\d+)(\d\d\d)(\D)/$1,$2$3/;
print "$s\n";
Естественно, в обоих случаях вместо "$1," можно поставить "$1 ".
Цифры после десятичной точки не разделяются.
Еще можно посмотреть "Masternig regular epressions" by J.Friedl