use warnings; use strict; my %dispatch = ( add => sub { my $sum = 0; $sum += $_ for @_; $sum; }, multiply => sub { my $prod = 1; $prod *= $_ for @_; $prod; }, ); my $op = shift @ARGV; print $dispatch{$op}->(@ARGV);