in reply to Serializing coderefs

I'm trying to do it using B::Utils. Looks like I'm wrong, since this code:
#!/usr/bin/perl my $s = sub { my $k = shift; return $k;}; use B::Utils qw( walkoptree_simple ); print walkoptree_simple( $s, { print } );
issues an error: Can't call method "isa" on unblessed reference looks like B::Utils does not work with coderefs. Any hint?

Replies are listed 'Best First'.
Re: Re: Serializing coderefs
by jmerelo (Sexton) on Jun 20, 2002 at 09:11 UTC
    Looks like this does the job:
    my $s = sub { my $k = shift; return $k;}; use B::Deparse; my $deparse = B::Deparse->new("-p", "-sC"); print $deparse->coderef2text($s);
    The morale here: when in doubt, ask, but don't wait for the answer, work on it...
      That of course "does the job" for a limited subset of coderefs, since at the moment there's no way to know the closure bindings (or get at them for their current values), so it'll come back to life pointing at an entirely wrong set of closure-bound variables.

      This is a known issue, and being considered during the development of the Perl6 runtime engine.

      -- Randal L. Schwartz, Perl hacker

        Is there a better way? Any reference to the cases where it will fail?
    A reply falls below the community's threshold of quality. You may see it by logging in.