in reply to sprintf vs formline

You needn't use an extra variable either, btw.
sub foo { local $^A = "+-----------------------+\n"; formline "| \@|||||||||||||||||||| |\n", $_ for @_; $^A .= "+-----------------------+\n"; return $^A; }

Makeshifts last the longest.