mod_perl is a persistent process, but there's no guarantee that from one load to the next you will get the *same* persistent process; Apache can spawn multiple threads which each handle requests, but don't know about the state of the other requests. The persistence makes mod_perl tricky from the standpoint that globals may retain values from one hit to the next. But it also makes mod_perl tricky from the standpoint that from one hit to the next you may not get the same process.
CGI in general (and by derivation, web server frameworks too ) is stateless. mod_perl is not only stateless, it's deceptive in that it can sometimes give the impression of maintaining state (and usually when you don't want it to).
If you really want to maintain state between loads, do it explicitly using cookies and a database or temp-files, and/or send JSON packets back and forth, as frameworks such as Mojolicious do in a restful way.