Perl script to deal with all the 0's in nanoseconds
A second is 1,000,000,000 nanoseconds which means you have a lot of 0's when translating between (milli)seconds and nanoseconds.
This perl script makes it easy:
$ perl nanos.pl 2
2 seconds are
2,000 milliseconds
2,000,000 clocks per second
2,000,000,000 nanoseconds
You may use fractions, time units and multiple arguments:
$ perl nanos.pl .25 500ms 1234567ns
.25 seconds are
250 milliseconds
250,000 clocks per second
250,000,000 nanoseconds
500 milliseconds are
0.5 seconds
500,000 clocks per second
500,000,000 nanoseconds
1234567 nanoseconds are
0.001,234,567 seconds
1.234,567 milliseconds
1,234.567 clocks per second
#!/usr/bin/env perl
sub readable {
my($t) = @_;
$t =~ s/(\d)(?=(\d{3})+(\D|$))/$1\,/g;
return $t;
}
sub seconds {
my($t) = @_;
printf("%32s seconds\n", readable($t));
}
sub millis {
my($t) = @_;
$t *= 1000;
printf("%32s milliseconds\n", readable($t));
}
sub clocks_per_second {
my($t) = @_;
$t *= 1000000;
printf("%32s clocks per second\n", readable($t));
}
sub nanos {
my($t) = @_;
$t *= 1000000000;
printf("%32s nanoseconds\n", readable($t));
}
for ($n = 0; $n <= $#ARGV; ++$n) {
$seconds = $ARGV[$n];
if ($seconds =~ /ns/) {
$seconds =~ s/ns//;
print "${seconds} nanoseconds are\n";
$seconds /= 1000000000;
seconds $seconds;
millis $seconds;
clocks_per_second $seconds;
} elsif ($seconds =~ /cps/) {
$seconds =~ s/cps//;
print "${seconds} clocks per second are\n";
$seconds /= 1000000;
seconds $seconds;
millis $seconds;
nanos $seconds;
} elsif ($seconds =~ /ms/) {
$seconds =~ s/ms//;
print "${seconds} milliseconds are\n";
$seconds /= 1000;
seconds $seconds;
clocks_per_second $seconds;
nanos $seconds;
} else {
print "${seconds} seconds are\n";
millis $seconds;
clocks_per_second $seconds;
nanos $seconds;
}
}