#! perl -slw use strict; my %dispatch = ( A => sub{ map{ $_ +1 } @_ }, B => sub{ map{ $_ *2 } @_ }, C => sub{ map{ $_**2 } @_ }, D => sub{ map{ $_ +3 } @_ }, E => sub{ map{ $_ *5 } @_ }, ); my $func_com = $ARGV[ 0 ] || 'ABC'; my @some_val = 1 .. 10; @some_val = ( $dispatch{ $_ } || sub{ @_ } )->( @some_val ) for split '', $func_com; print "$func_com: [ @some_val ]"; __END__ c:\test>junk6 ABC: [ 16 36 64 100 144 196 256 324 400 484 ] c:\test>junk6 A A: [ 2 3 4 5 6 7 8 9 10 11 ] c:\test>junk6 B B: [ 2 4 6 8 10 12 14 16 18 20 ] c:\test>junk6 AB AB: [ 4 6 8 10 12 14 16 18 20 22 ] c:\test>junk6 C C: [ 1 4 9 16 25 36 49 64 81 100 ] c:\test>junk6 AC AC: [ 4 9 16 25 36 49 64 81 100 121 ] c:\test>junk6 ABCDE ABCDE: [ 95 195 335 515 735 995 1295 1635 2015 2435 ] c:\test>junk6 F F: [ 1 2 3 4 5 6 7 8 9 10 ] c:\test>junk6 FA FA: [ 2 3 4 5 6 7 8 9 10 11 ]