Currently there is no way to override keys and push with custom functions that behave the same way, because mykeys(%foo) and mykeys(\%foo) are indistinguishable with the (+) prototype. Also, the (+@) prototype for push is wrong, as push doesn’t accept hashes. So I would like to propose a new \. prototype, which can also be used in \[whatever]: It will accept any scalar expression, take a reference to the result, and pass that to the function. Then push and keys can be emulated like this: mypush(\[@.]@); mykeys(\[@%.]); This is also getting in the way of &CORE::keyword.Thread Next