In response to your first, I'm going strictly by the example provided by the author of HTML::Template. If it's good enough (or required) by them, it's good enough for me.
Second, attempts to return it NOT in the form of an array ref result in errors. As I mentioned, this data structure works fine for my other subroutine. The array is initiated and assigned *exactly* like it is in mail(), and then passed to the template object in the form of an array. No problems whatsoever.