If I may add my $0.02, there is something to be said for minimising repetition of similar looking code, particularly if it is likely that the number of repetitions may increase. With that in mind, may I offer:
Now, you are on your way to implementing a reverse polish engine ...#!/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 numbe +rs.\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";
"As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom
In reply to Re: Simple add and multiply subroutines
by NetWallah
in thread Simple add and multiply subroutines
by negzero7
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |