If you had  use strict; use warnings: you would have been warned

Variable "$text" will not stay shared at file line 1

If you had used diagnostics you'd have gotten

(W closure) An inner (nested) named subroutine is referencing a lexical variable defined in an outer named subroutine. When the inner subroutine is called, it will see the value of the outer subroutine's variable as it was before and during the *first +* call to the outer subroutine; in this case, after the first call to th +e outer subroutine is complete, the inner and outer subroutines will no longer share a common value for the variable. In other words, the variable will no longer be shared. This problem can usually be solved by making the inner subroutine anonymous, using the sub {} syntax. When inner anonymous subs that reference variables in outer subroutines are created, they are automatically rebound to the current values of such variables.

Read Tutorials: Closure on Closures, Lexical scoping like a fox

If you're going to use named subs, use pre-declare any my variables (like $tl and $text ) in the largest possible scope (before any sub definitions) or simply use our globals, and you'll be fine with strict/warnings, and you'll avoid calling methods on destroyed object ( you'll avoid Failed to AUTOLOAD... )

Or , keep what you have, but use anonymous sub/anonymous closure

sub do_top { if ( !Exists($tl) ) { $tl = $mw->Toplevel; $tl->title('Help'); $tl->geometry("1000x700"); my $frame = $tl->Frame()->pack; my $lab = $tl->Label()->pack; my $ent = $tl->Entry()->pack; #### ANONYMOUS SUB , ANONYMOUS CLOSURE, #### CLOSED OVER LEXICAL $text #### $text is lexical to if {} block in do_top my $text = $tl->Scrolled('Text'); my $push_button2 = sub { $text->insert( 'end', "You pushed button2\n" ); }; $tl->Button( -text => 'Exit', -command => sub { $tl->destroy; +} )->pack; $tl->Button( -text => 'Open File1', -command => $push_button2 + )->pack; $text->pack(); } else { $tl->deiconify; $tl->raise; } }

In reply to Re: failed AUTOLOAD widgets when trying to destory widget by Anonymous Monk
in thread failed AUTOLOAD widgets when trying to destory widget by reaper9187

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.