sub A { my ($OBJ,$p) = @_; if ( exists $OBJ->{$p} && exists $OBJ->{'sub'}) { my $q = $OBJ->{$p}; $q = $OBJ->{'sub'}->($q); # execute the sub stored in $OBJ print STDOUT "$p=$q\n"; } my $formatThis = sub { my ($x) = @_; my $y = sprintf ( "%.2f", $x); return $y; }; $OBJ->{'sub'} = $formatThis; } # test it my $ref = {}; $ref->{'float'} = 3.1415926; A($ref); # get a sub A($ref,'float'); # now doit