#!/usr/bin/perl use strict; use warnings; our %opts; my $lookup; for (@ARGV) {$opts{$1}=$2 if (/([ABC]{1})=(\d+\.?\d*)/)} $lookup = join '', sort keys %opts; die "I need two sides!\n" unless (length($lookup)==2); my $lut = { 'AB' => sub {return 'C='.sqrt($opts{A}**2+$opts{B}**2)}, 'AC' => sub {return 'B='.sqrt($opts{C}**2-$opts{A}**2)}, 'BC' => sub {return 'A='.sqrt($opts{C}**2-$opts{B}**2)}, }; print &{$lut->{$lookup}}, "\n";