Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Serializing coderefs

by jmerelo (Sexton)
on Jun 20, 2002 at 08:53 UTC ( #175932=perlquestion: print w/replies, xml ) Need Help??

jmerelo has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I am trying to store code into XML, and I have bumped into CODEREFS. If I have a ref-to-subroutine, ¿how can I access the code? I know it invoves doing something with B::Generate, B, and possibly B::Utils, and this article seems to point the way. But I can't find a direct way of doing it. Looks like the latestest version of Data::Dumper does it also, but not the version of having it installed. Shouldn't coderefs be considered the same as array refs or hash refs?

Replies are listed 'Best First'.
Re: Serializing coderefs
by jmerelo (Sexton) on Jun 20, 2002 at 09:04 UTC
    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?
      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

      A reply falls below the community's threshold of quality. You may see it by logging in.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://175932]
Approved by shotgunefx
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (8)
As of 2020-06-03 10:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you really want to know if there is extraterrestrial life?



    Results (22 votes). Check out past polls.

    Notices?