#!/usr/bin/perl -w use strict; my %do_op=( add => sub{$_[0] + $_[1]}, multiply => sub{$_[0] * $_[1]}, divide => sub{$_[0] / $_[1]}, subtract => sub{$_[0] - $_[1]}, power => sub{$_[0] ** $_[1]}, equal => sub{$_[0] == $_[1]? $_[0]:0}, max => sub{$_[0] > $_[1]? $_[0]:$_[1]}, min => sub{$_[0] < $_[1]? $_[0]:$_[1]}, ); sub operate{ my $op=shift; my $tot = shift; while (defined (my $x=shift)){ $tot = $do_op{$op}->($tot,$x); } $tot; }; my $op = shift or die "You must specify an operation followed by numbers.\n"; die "Non-numeric input.\n" if grep /\D/, @ARGV; die "Invalid operation.\n" unless exists $do_op{$op}; print "$op (@ARGV)= ". operate($op, @ARGV) . "\n";