Here's an alternate approach, pehaps a bit complex, but it would get you around having to have 'push' at all. I assume you have some sort of session tracking mechanism already in place.
- Have the script that runs the long query just return a page with a meta-refresh of X seconds, while it forks and runs the long query in the background. The child process then stores the results in a session specific location (maybe use Apache::Session).
- The script that the meta-refresh points to checks the session store to see if the results are there. If they are, they are given to the browser, and removed from the session store. If not, the same meta-refresh page is returned to the browser and the process repeats until the long query is complete.
perl -l -e "eval pack('h*','072796e6470272f2c5f2c5166756279636b672');"