I've occasionally wondered about the dual implementation (by columns / by rows) advertised by Data::Table.
Row-based implementation is better for sorting and pattern matching, while column-based one is better for adding/deleting/swapping columns.
Data::Table swaps them around internally so you don't have to worry about it. But out of curiousity I did some benchmarking, copying the rotate() routine from D::T and I find that adding a column is anywhere from 4-10 times slower, and deleting from 6-12 times slower if you rotate implementation than if you just take the naive approach of transforming every row in turn!
Maybe I've missed something out (I haven't tested with an actual D::T object, just a stripped down structure), but if that's true you'd need to do over that number of additions/deletions to make it worth rotating the structure. (Because once you've rotated, the other insertion/deletion operations are free).