sub new { my $class = shift; my ($max_rows) = @_; my $self = bless { max_rows => $max_rows, data => [], }, $class; } sub add_column { my $self = shift; push @{$self->{data}}, []; } sub add_value { my $self = shift; my ($x, $y, $value) = @_; return unless $x <= $max_rows; return unless $x >= 0; $self->{data}[$y][$x] = $value; } sub get_value { my $self = shift; my ($x, $y) = @_; return $self->{data}[$y][$x]; }