sub numfix { my $num = shift; $num = sprintf("%.2f", $num); 1 while $num =~ s/^([-+]?\d+)(\d{3})/$1,$2/; return $num; } foreach ( qw( 1000 1024 4.3 2.44 1024.44 ) ) { print( $_ ); print( " => " ); print( numfix( $_ ) ); print( "\n" ); } #### 1000 => 1,000.00 1024 => 1,024.00 4.3 => 4.30 2.44 => 2.44 1024.44 => 1,024.44