http://www.perlmonks.org?node_id=67621


in reply to storable.pm+CODE refs

I've been thinking about this for a while... I think that it ought to be possible using B::Deparse.

According to the doc:

use B::Deparse; $deparse = B::Deparse->new("-p", "-sC"); $body = $deparse->coderef2text(\&func); eval "sub func $body"; # the inverse operation

So it should be possible to store the coderef as text along with something to indicate that it's a coderef (and it's name, if it has one). On thaw it would simply eval it.

Note that you can probably already do this without touching Storable. IIRC, before freeze()/thaw()ing Storable will try to call STORABLE_{freeze,thaw} in your namespace. You can use that as a filter mechanism.

-- darobin

Replies are listed 'Best First'.
(tye)Re2: storable.pm+CODE refs
by tye (Sage) on Mar 28, 2001 at 02:33 UTC

    Deparse isn't perfect (I recall examples of code that it doesn't deparse correctly) and there is still the issue of how to recreate a closure.

            - tye (but my friends call me "Tye")

      Yes I know, obvioulsy if the solution was perfect someone would have done it already :)

      However it can imho be a good place to look at given a certain level of simplicity, and may be a good place to watch for future updates on that front.

      -- darobin