perl -MData::PowerSet -le 'my $p = Data::PowerSet->new(qw(A B C D E)); print "@$_" while $_= $p->next' # produces : A B C D E B C D E A C D E C D E A B D E B D E A D E D E A B C E B C E A C E C E A B E B E A E E A B C D B C D A C D C D A B D B D A D D A B C B C A C C A B B A #### my %dispatch = ( A => \&func_a, B => \&func_b, C => \&func_c, D => \&func_d, E => \&func_e, ); for my $token (split //, $func_com) { push @all_res, [$dispatch{$token}->(@some_val)]; }