Update: OK, I'm back! The TypedArray type constraint from List::Objects::Types didn't have quite the features I needed for the example, so I submitted a patch to the module's author, and he's released a new version.

There is some scope for improvement. For example, the code assumes that each row will hold the same number of cells. (That is, the grid doesn't have a "ragged right edge".) It might be a good idea to assert this in the code some places, to make sure that it's always the case.