package Foo; sub new { bless { val => $_[1] }, $_[0]; } sub zug { my $self = shift; my $arg = shift; return "$arg $self->{val} $arg"; } sub zwang { my $self = shift; my $arg = shift; return join( ' ', ($self->{val}) x $arg ); } #### my $f = Foo->new('doot'); my @meth = (qw(zug zwang)); # doesn't work: # print $f->$meth[rand @meth](3); my $m = $meth[rand @meth]; print $f->$m(3), $/; #### my $f = Foo->new('doot'); # update: with subrefs: my @meth = (\&Foo::zug, \&Foo::zwang); print $f->${\$meth[rand @meth]}(3);