#! /usr/bin/perl

use strict;
use warnings;

print <<EOF;
units calculator by stefan\@blinkenarea.org

enter expressions to calculate
supported suffixes on numbers:
  mm    millimeters
  mil   1/1000 inch
  pcb   PCB file units (default)
examples:
  3.5mm+1.2mil
enter EOF (control D) to end program

EOF

while( 1 ) {

  print "> ";
  my $line = <>;
  if( ! $line ) {
    last;
  }
  chomp $line;
  chomp $line;

  if( $line ne "" ) {

    $line =~ s/([0-9]*(\.[0-9]*)?)mm/($1\/0.000254)/g;
    $line =~ s/([0-9]*(\.[0-9]*)?)mil/($1\/0.01)/g;
    $line =~ s/([0-9]*(\.[0-9]*)?)pcb/($1\/1.0)/g;

    $line =~ s/[^0-9.()*\/+-]//g; # this is important for letting through only arithmetic expressions

    my $result = eval( $line );

    if( defined $result ) {
      printf( "%f\n%fmm\n%fmil\n%fpcb\n",
              $result,
              $result * 0.000254,
              $result * 0.01,
              $result * 1.0 );
    } else {
      print( "error\n" );
    }

  } # if( $line ne "" )

} # while( 1 )