1000→1,000のように数値を3桁毎に区切るには、正規表現「s/([+-]?\d+)(\d\d\d)/$1,$2/go」を使用しています。
#!/usr/local/bin/perl use strict; use warnings; my @test_vals = (-10000,-1000,-100,-10,-1,0, 1,10,100,1000,10000, 1234567.12345,1000.000001); for my $org_val ( @test_vals ){ my $int_val = ""; #整数部分 my $deci_val = ""; #小数部分 if ( $org_val =~ /([+-]?\d+)(\.?\d*)/){ $int_val = $1; $deci_val = $2; } else { $int_val = $org_val; } #整数部分を3桁毎に区切る $int_val =~ s/([+-]?\d)(?=(\d{3})+(?!\d))/$1,/go; my $split_val = $int_val . $deci_val; print sprintf("%20s -> %20s","($org_val)","($split_val)"),"\n"; }
実行結果
$ ./foo.pl (-10000) -> (-10,000) (-1000) -> (-1,000) (-100) -> (-100) (-10) -> (-10) (-1) -> (-1) (0) -> (0) (1) -> (1) (10) -> (10) (100) -> (100) (1000) -> (1,000) (10000) -> (10,000) (1234567.12345) -> (1,234,567.12345) (1000.000001) -> (1,000.000001)
http://d.hatena.ne.jp/end0tknr/20080901/1220272146
以前、Regexp::Common::numberによる数値書式のチェックも紹介していますが、この記事も参考になるかもしれません。