in reply to Auto-evaluating anonymous subroutines

If I make a tie interface to return the return value of the code ref, then I lose the ability to pass in parameters.
No you don't. You would pass them by assignment. Whether that makes sense as an idiom in your model is something you'll have to decide.
#! perl use strict; use warnings; package Doohickey; require Tie::Scalar; our @ISA = 'Tie::StdScalar'; # returns the value you presumably want to print. sub FETCH { "Hi\n"; } # This actually prints a value, and then if you use the assignment, # the FETCH is called that returns a value sub STORE { my ($this, $val) = @_; print "I see arguments ($val)\n"; } package main; my $enemy; tie $enemy->{strength}, 'Doohickey'; printf "%s\n", $enemy->{strength} = 5; # you could "pass" a ref to an +argument list, too print "...\n"; print $enemy->{strength}, "\n";

Caution: Contents may have been coded under pressure.