I'm not familiar with Tk, but I think he was trying to get you to do something more like this:
#! c:\perl\bin -w
use strict;
use Tk;
my $mw=new MainWindow;
$mw->minsize(qw(250 150));
$mw->title(" Tk Test 1 ");
my $body=$mw->Frame(-background=>'cyan')->pack(side=>'bottom', -fill=>
+'x');
my $fr1=$body->Frame(-background=>'magenta')->pack(side=>'top', -fill=
+>'x');
my $txt='hi';
$fr1->Label(-textvariable=>\$txt, -background=>'yellow', -foreground=>
+'red')->pack(-fill=>'y');
sleep 5;
change('foo', $fr1, $mw);
sleep 5;
change('bar', $fr1, $mw);
MainLoop();
sub change {
my ($new_txt, $fr1, $mw)=@_;
$txt = $new_txt
$fr1->pack(-fill=>'y');
$mw->update;
}
Again, I'm not a Tk guy, but I think the $txt variable gets tied to the label, so you just want to update the variable and get the label to refresh itself.
Update: Just tested it here, and yup, it replaces the old label.
Update 2: Fixed code formatting.