in reply to Re^3: Copy a builtin sub to a different name and then override
in thread Copy a builtin sub to a different name and then override

You seem to think you've counted coup here but bliako said LanX's final suggestion did in fact solve the issue even if the original suggestion wasn't on point because it jumped into the semantics of the sample code too literally. Pointless drama over silly beef just gets in the way of communication and solving problems.

  • Comment on Re^4: Copy a builtin sub to a different name and then override

Replies are listed 'Best First'.
Re^5: Copy a builtin sub to a different name and then override (exists)
by LanX (Saint) on Jun 02, 2018 at 15:40 UTC
    > 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.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

    update

    using defined is even "saner".

    see Re^3: Copy a builtin sub to a different name and then override