Skip to content

Instantly share code, notes, and snippets.

@markusfisch
Last active July 9, 2019 07:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save markusfisch/3d7099a7e95310bea6a9 to your computer and use it in GitHub Desktop.
Save markusfisch/3d7099a7e95310bea6a9 to your computer and use it in GitHub Desktop.
Perl script to deal with all the 0's in nanoseconds

Convert 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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment