use Tk;
require Tk::BrowseEntry;

$numWidgets = 10;

$mw = MainWindow->new(-title => "Play w/pack");
$f = $mw->Frame(-borderwidth => 1, 
                -relief => 'groove')
                ->pack(-side => 'top', 
                -fill => 'x');
my (@packdirs) = ();

$i = 0;
foreach (0..$numWidgets)
{
  $packdirs[$_] = 'top';
  my $be = $f->BrowseEntry(-label => "Widget $_:", 
                         -choices => ["right", "left", "top", "bottom"], 
                         -variable => \$packdirs[$_], -browsecmd => \&repack)
                         ->pack(-ipady => 5);
}

$f->Button(-text => "Repack", 
           -command => \&repack )
         ->pack(-anchor => 'center');

$top = $mw->Toplevel(-title => "output window");
my $c;
foreach (@packdirs)
{
  my $b = $top->Button(-text => $c++ . ": $_")
            ->pack(-side => $_, -fill => 'both', -expand => 1);
}

MainLoop;

sub repack
{
  @w = $top->packSlaves;
  foreach (@w) { $_->packForget; }
  my $e = 0;
  foreach (@w)
  {
    $_->configure(-text => "$e: $packdirs[$e]");
    $_->pack(-side => $packdirs[$e++], -fill => 'both', -expand => 1);
  }
}
