in reply to Dynamic functions

Another way:

#!/usr/bin/perl -w use strict; sub func_a_1 { print "A 1\n"; } sub func_a_2 { print "A 2\n"; } sub func_b_1 { print "B 1\n"; } sub func_b_2 { print "B 2\n"; } for my $n( qw/ a b /){ for my $i (1..2) { eval "&func_$n_$i()" } }

Peter L. Berghold -- Unix Professional
Peter -at- Berghold -dot- Net; AOL IM redcowdawg Yahoo IM: blue_cowdawg

Replies are listed 'Best First'.
Re^2: Dynamic functions
by Anonymous Monk on Sep 10, 2011 at 02:53 UTC
    #!/usr/bin/perl -- use strict; use warnings; Main(@ARGV); exit(0); sub Main { my $package = __PACKAGE__; my $stash = do { no strict 'refs'; \%{ $package . '::' } }; print "$package\n$stash\n"; for my $symbol ( keys %$stash ) { next unless $symbol =~ /^func_/; print "\t$symbol\n"; #~ my $coderef = $package->can( $symbol ); # method/@ISA #~ my $coderef = *{ $stash->{$symbol} }{CODE}; my $coderef = \&{ $stash->{$symbol} }; print "\t$coderef\n\t\t", $coderef->(), "\n"; } ## end for my $symbol ( keys %$stash) } ## end sub Main sub func_a_1 { "A 1" } sub func_a_2 { "A 2" } sub func_b_1 { "B 1" } sub func_b_2 { "B 2" } __END__ main HASH(0x3f8b4c) func_a_1 CODE(0x9ad2c4) A 1 func_b_2 CODE(0x9d89fc) B 2 func_a_2 CODE(0x9ad474) A 2 func_b_1 CODE(0x9d898c) B 1