use strict; use warnings; use 5.010; package LibStuff; sub new { my ($class, %params) = @_; return bless \%params, $class; } sub picker { my ($self) = @_; my @keys = keys %$self; return $keys[rand @keys]; } sub getter { my ($self, $param) = @_; return "$self->{$param}"; } sub sub0 { my ($self) = @_; say $self->{0}; } sub sub1 { my ($self) = @_; say $self->{1}; } sub subWibble { my ($self) = @_; say $self->{wibble}; } package main; my $libObj = LibStuff->new(0 => 'a', 1 => 'b', wibble => 'c'); say $libObj->getter($libObj->picker()); given ($libObj->picker()) { when ('0') {$libObj->sub0()} when ('1') {$libObj->sub1()} when ('wibble') {$libObj->subWibble()} }