By a solution, I assume you mean is there a way to use the
table() and
div() functions without the memory jump. I'm not familiar much with the internals of CGI.pm, but I suspect the memory usage is due to a copy of the data being made in the function call. Each
Tr(td(blah)) call creates a string. Then the
table(@rows) call copies all those strings into a bigger string which it then returns. Your alternative skips the creation of the intermediate variable and just prints the existing pieces individually. If my understanding is correct. Then your second example is in fact a solution. If you really want to get the output of the table() function, you could do something like the following:
- Get your @rows like you already do
- Call table(), giving it a known short junk string as the data, e.g. table('<tr><td></td></tr>').
- Split the output of the table() function on this junk string. You should get two items, the beginning and ending table tags and any associated attributes or other acoutrements.
- Then print directly to your file handle the table start portions, your @rows, and the table end portion.
--DrWhy
"If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."