morristech
7/9/2019 - 7:31 AM

Perl script to deal with all the 0's in nanoseconds

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;
	}
}