+# This is shamelessly stolen from pythons urlgrabber
+sub format_number {
+ my $number = shift;
+ my $SI = shift || 0;
+ my @symbols = ('', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y');
+ my $step = $SI?1000:1024;
+ my $thresh = 999;
+ my $depth = 0;
+ my $max_depth = $#symbols;
+ my $format;
+
+ while (($number > $thresh) and ($depth < $max_depth)) {
+ $depth += 1;
+ $number /= $step;
+ }
+
+ if ($number =~ /^[+-]?\d+$/) {
+ # Integer.
+ $format = '%i%s';
+ } elsif ($number < 9.95) {
+ $format = '%.1f%s';
+ } else {
+ $format = '%.0f%s';
+ }
+ return sprintf($format, $number, $symbols[$depth]);
+}
+