sub foo_set { my ($self, $code) = @_; my $code_ref = $self->can($code); if (defined($code_ref)) { $self->{'foo_code_ref'} = $code_ref; } else { die "Unable to handle '$code'"; } } sub foo { my ($self, $arg) = _; my $code_ref = $self->{'foo_code_ref'}; $self->code_ref($arg); }