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

Very nice.

Overriding CORE::GLOBAL::sleep but calling CORE::sleep makes total sense when you see it (as it avoids the recursion).

This is of course what Lanx has been trying to say all along :-)

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

Replies are listed 'Best First'.
Re^4: Copy a builtin sub to a different name and then override
by Your Mother (Archbishop) on Jun 01, 2018 at 23:51 UTC

    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.

      > 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

Re^4: Copy a builtin sub to a different name and then override
by Anonymous Monk on Jun 01, 2018 at 23:43 UTC
    Bla bla