{ # closure for sub p my %seen; sub p { my $arg_string = join '^', @_; return $seen{$arg_string} if exists $seen{$arg_string}; # compute $result here as usual # ... return $seen{$arg_string} = $result; } # end sub p } # end closure for sub p