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);