If you are on *nix, would it be good enough to open a pipe to column(1) for the standard output? If that wouldn't work, and/or you are not on *nix, maybe you could check the column(1) source code (as someone suggested doing with ls(1)).
You might also check out Data::Show::Table.
HTH, --traveler