in reply to Re: The B:: Modules
in thread The B:: Modules


Thanks, I actually think i read this article back when it first came out. I think I will give it a read again. Thanks.

Update: I went back and tried with your Google search params, I noticed it was the first and pretty much only relevant link on there (except for something by chromatic which I have bookmarked for after the kids are in bed). Maybe I should start looking for info about the perl C code, and just transpose it to Perl?


Replies are listed 'Best First'.
Handy Algorithm For Using B::Generate
by chromatic (Archbishop) on Jan 25, 2004 at 23:40 UTC
    1. Write the Perl code you want to produce.
    2. Dump it to opcodes with B::Concise.
    3. Write the Perl code you want to transform.
    4. Dump it to opcodes.
    5. Figure out the difference between #2 and #4.
    6. Write the B::Generate code to produce those opcodes.
    7. Fiddle with stuff until it stops segfaulting.
    8. Fiddle with stuff until it stops running into an infinite loop.

    For extra credit, fiddle with stuff until it produces the right answer. If you reach this step, please tell the rest of us how you did it!


      Thanks, I started to doing this earlier today, and then just got stuck on trying to get plain old B to print out the innards of my subroutines (building off Simon's tutorial's examples). I think I read about half the code in B::Deparse before I managed to hit something similar to the infinite loop you speak of in Step 8.

      I also kept encountering a package B::SPECIAL, for which I saw no listing in B documentation for, but did find in the source that is was just a plain old B::OBJECT. Anyone know what this refers too?

        B::SPECIAL objects are instances of pointers to the perl global invariants, PL_sv_undef, PL_sv_yes, and PL_sv_no. You were seeing one of those.