sub variable { my $c = shift; my $oldvarref = $c->{'-variable'}; my $oldval = $$oldvarref if $oldvarref; if(@_) { my $varref = shift; if ($oldvarref) { $c->traceVdelete($oldvarref); } $c->{'-variable'} = $varref; $c->traceVariable($varref, 'w', sub { $c->value($_[1]) }); $$varref = $oldval; _layoutRequest($c,2); } $oldval; } <\code>
Here is the fix

sub variable { my $c = shift; my $oldvarref = ""; my $oldval = ""; if (defined($c->{'-variable'})) { $oldvarref = $c->{'-variable'}; $oldval = $$oldvarref if $oldvarref; } if(@_) { my $varref = shift; $c->traceVdelete($oldvarref) if (defined($oldvarref) and ($oldvarref ne "")); $c->{'-variable'} = $varref; $c->traceVariable($varref, 'w', sub { $c->value([1]) }); $$varref = $oldval if (defined($oldval) and ($oldval ne "")); _layoutRequest($c,2); } return ($oldval) if (defined($oldval) and ($oldval ne "")); }