How can I delete an entire package, including its symbol table? Either through Perl or XS.

Context: I have an application with an embedded perl interpreter. To simplify the explanation, let's say the application is a "page browser", where each page happens to be written in Perl. In order to keep the pages from colliding with each other, I generate a unique package name for each page, and compile the page within that package. (If the page chooses to set its own package, then it's expected to know how to deal with the consequences.)

So far, so good. But when I switch away from a page, I want to clean things up. I don't want to just nuke the interpreter and create a new one, because there is some shared state in the application itself that I don't want to lose. So I'd like to be able to wipe out the entire package I created, and have the package variables' DESTROY methods called if applicable. (I would also kind of like the interpreter to forget about any required files, so that when I went back to the page, it would do the same thing it did the first time. But those files could manipulate global state, so I'd better not. I'll stick with use'ing things so that they'll just re-import stuff when reactivated.)

Is there some way to do this? Or am I approaching this the wrong way? General advice is appreciated too.

I have tried a couple variations of delete $main::{"MYPACKAGE::"}, but no luck so far.


In reply to Deleting a package by sfink

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.