I think
Text::Table is a good start. You "write" to the table one row at a time and it figures out the correct widths for you when you're done. I had actually written my own before finding this one. Mine is a bit smarter so maybe I'll submit it sometime, but I'm hesitant to add to an already crowded field.
The Perl Cookbook also has a few examples that would help you when you have text layout issues that you figure someone else has solved before.
--
[ e d @ h a l l e y . c c ]