> even if the original suggestion wasn't on point
Actually the first approach works and is saner if CORE::GLOBAL::sleep() already exists.
If you can't be sure if someone else already overrode the builtin you should wrap around the wrapper (which might already wrap around another wrapper and so on).
OK, granted: In the case of builtins that's a very wide interpretation of "sane", but this technique can be useful with any kind of wrapper (like $SIG{"__DIE__"} et al)
The problem here is to know if a real sub-ref already "exists", and - surprise - exists does the trick
use strict;
use warnings;
warn "Doesn't Exist!" unless exists &CORE::GLOBAL::sleep;
*CORE::GLOBAL::sleep =sub {42};
warn "Exists!" if exists &CORE::GLOBAL::sleep;
Doesn't Exist! at d:/Users/lanx/pm/core_sleep.pl line 4.
Exists! at d:/Users/lanx/pm/core_sleep.pl line 6.
update
using defined is even "saner".
see Re^3: Copy a builtin sub to a different name and then override |