Can you think of a way to guarantee that Perl does not unload a class module *before* it deletes the final instance of this class? I have written a Perl object module that contains a database connection class variable (it is a package variable). The class constructor counts each object instance, and creates a database connection only for the first object instance. The destructor disconnects from the database only when Perl deletes the *last* instance. However, when the DESTROY method, on behalf of the final instance, attempts to disconnect from the database, Perl complains that the database reference is no longer defined! By having the END subroutine defined in this module print out a debug message, I learned that Perl unloads the module *before* it deletes the the final object instance. This prematurely deletes the database connection and renders the database package variable undefined. I have avoided this issue by using the END subroutine to disconnect from the database, but it surprises me that Perl would unload a class module before it deletes all instances of a class. Do you agree that this seems like incorrect behaviour?

In reply to Weird perl behavior regarding unloading class modules by Anonymous Monk

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.