Advanced Perl Programming, 2nd Edition by Simon Cozens The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated February 21, 2008. UNCONFIRMED errors and comments from readers: [38] Paragraph "Doing things at the end with DESTROY; The first example shown in "Doing things at the end with DESTROY" does not work (neither in Perl 5.6.1 nor in 5.8.6). The DESTROY block gets never called. It works, however, in this slightly modified way: sub do_later (&) { bless [shift], "Do::Later"; # code ref is enclosed in array ref } sub Do::Later::DESTROY { # take elem #0 of array ref instead $_[0]->[0]->(); # of code ref directly } It seems that Perl doesn't like to call destructors on objects which are based upon code refs. {114} Code sample; Surely [% FOREACH item = news.items %] should be [% FOREACH item = rss.items %] and [% MACRO RSSBox(url) USE rss = XML.RSS.URL(url) %] isn't right, as you're specifying the BLOCK as the macro, not just the USE. (241) 3rd Paragraph (in the code); The line of code: if (SvTRUE(get_sv("MyModule::DEBUG", TRUE")) {... clearly has too many quotes/is missing a quote around TRUE. Either if (SvTRUE(get_sv("MyModule::DEBUG", "TRUE")) {... or if (SvTRUE(get_sv("MyModule::DEBUG", TRUE)) {... worked fine for me (using ActivePerl on XP with VC++6 and similar-ish code: testing whether a variable had been created already in the main package)