I changed the definition of the show and toggle methods like this:
sub show {
my $board = shift;
print "\e[H";
for my $row (@$board) {
return unless defined $row;
print map $_ ? '*' : defined $_ ? '.' : '', @$row;
print "\e[K\n";
}
print "\e[J";
use Time::HiRes "sleep";
sleep(6e-3);
} # show
sub toggle {
my ($board, $x, $y) = @_;
my $old = $board->[$y][$x];
return unless defined $old;
$board->[$y][$x] = $old eq 1 ? 0 : 1;
} # toggle
and now I can see the lights being chased down to the bottom of the board. Looks nice.