develooper Front page | perl.beginners | Postings from August 2009

AW: CGI and persistent data (without Storable)

Thread Previous | Thread Next
From:
Thomas Bätzler
Date:
August 28, 2009 00:31
Subject:
AW: CGI and persistent data (without Storable)
Message ID:
E350C77ABFDBD242BDD51F5DA07905C102826B08@SONNE.gw.bringe.net
Steve Bertrand <steve@ibctech.ca> asked:
> I'm writing a web interface using CGI::Application for a project that
> houses numerous methods within a dozen modules.
> 
> One particular process displays a template to the user with passed in
> data, and then has four more steps before completing. The result of this
> procedure will be the modification of an elaborate data structure. The
> data structure may need to be modified along the way.
> 
> Given that I can get through the web GUI portion of the process with
> just a couple of params, I'd like to find a way to retain the entire
> data structure without having to re-instantiate it (which requires
> rebuilding numerous objects etc), or pass each variable within it as a
> param on each CGI invocation.
> 
> Can I, and is it plausible to create a cyclic ref redundancy of the data
> structure, store the memory location in a variable, pass the variable
> data as a param, and then recreate the data based on the variable that
> contains the memory location at the end of the entire CGI process? Is
> exploiting Perl's garbage collection like this possible, and ok to do?
> 
> I'd like to be able to 'carry' the data structure without having to
> 'store' it to disk, if possible

If you're using "standard" Perl CGI, a new interpreter is spawned for each of your requests. At the end of each request, the interpreter exists, and it takes any uncollected garbage with it. The next Perl process you start will get a completely new, empty, pristine memory space without any traces of previous use. So you can't store store data in memory between invocations that way.

The easiest way to have persistent data across invocations is having a persistent Perl process and session handling. With CGI, this means using Apache and mod_perl and possibly a toolkit/framework/whatchamaycallit like Embperl on top. Although I have not used it yet personally, I would assume that the jifty framework is up to the task, too.

If you can't use mod_perl or a stand-alone jifty server and if you have a Unix system, http://search.cpan.org/~samtregar/IPC-SharedCache-1.3/SharedCache.pm might be useful.

HTH,
Thomas

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About