Main 
back: Tk canvas next: Tk bind -1 
     | 
 
 
 
(source)
Entry uses a tie to capture the value of the variable.  A
change to the variable from the program will cause the tied Entry-widget to
update the value on the screen.
The -command defines a callback.  Callbacks are
used to respond to user-actions, in this case the user who is pushing
the button.  Callbacks are hard to program exactly right; you have to
understand Perl very well to distinguish between different formulations:
 
 
 
-command => $c->move($l, $x, $y)
- The move command is called on the moment that the options for the
    button is collected: when the button is generated.  The line will
    appear on the screen in its moved position (remember that the window
    will not be drawn before MainLoop is reached).
 
    Pushing the button will result in an error, because the result of
    move will not be a valid callback (you hope).
    
  -command => [ 'move', $l, $x, $y ]
- The definition of callbacks says that this will be translated
    into: 
$button->move($l, $x, $y) when the button is pushed.
    This not correct, because you need to call move on canvas.  In most
    case where you write a callback, this notation is useful, but not in
    this case.
    
    Next to that, keep in mind that the values of $l,
    $x, and $y are
    substituted on the moment of definition: the line will always
    move over (15, 10).
     
  -command => [ 'move', $c, $l, $x, $y ]
- This doesn't help much: the move will still be called on a button, but
    it is not a defined operation for a button.
    
  -command => [ $c, 'move', $l, $x, $y ]
- If this callback was used in a 
bind, which will be
    discussed later, than this would be a valid choice: bind looks
    if the first argument of the list is an object.  If so, it calls
    the method on that object.  Mind however, that we are still moving
    over a constant (15,10).
    
  -command => [ sub {$c->move($l, @_)}, $x, $y ]
- In this case, the move will always be over 
(15, 10), but
    $l will be used with the value on moment of the call.
    
    Perl keeps the value of a variable alive as long as it can be
    accessed, even when the variable is a my and you leave
    the enclosing code-block (for instance the subroutine).
    Each my $l will result in a distinct variable.
     
  -command => sub {$c->move($l, $x, $y)}
- The last example finally achieves our goal: call the subroutine
    when the button is pushed.  The move uses the actual values stored
    in 
$l, $x, and $y
    
  -command => [ sub {$_[0]->move($_[1], $x, $y)}, $c, $l ]
- An even better notation.  In this case, I can reuse 
$c
    and $l for creating more objects.  Both are shown
    to be constants.  Of course, this is equivalent with:
   -command => [ sub { my ($c, $l) = @_;
                       $c->move($l, $x, $y)}
               , $c, $l ]
  
 
     |