{ my $giveMD5 = \&Foo::giveMD5; my %givenMD5; *Foo::giveMD5 = sub { my $md5 = $givenmd5{@_} ||= $giveMD5->( @_ ); # execute old to obtain "real" MD5 # do evil things to op tree for given parameters if first time return $md5; # the "right" value }; }