RJ Herrick am Sonntag, 5. Februar 2006 01.03:
> Thanks to the Johns for their responses, but I believe perhaps I was
> unclear about my intent.
>
> In validating my form input I look at my DB tables to see what types of
> input they will accept (valid values, maxlength, NULL ok, etc). This
> data is about the database, not the values coming in off the forms. It
> will stay the same until I alter my tables, which I won't be doing very
> often (in production at least :) ). So I'm looking to avoid gathering
> this metadata via DB calls every time I need to validate a form by
> instead using the cached metadata, stored somewhere by mod_perl. My
> thought was to put it into it's own namespace and have it available
> globally, loaded from one of my modules at startup.
> Does anyone else understand what I'm trying to say? I apologize if I'm
> not expressing myself in the right vernacular.
> Thanks,
> RJ Herrick

You could have a Cfg.pm module with a 

my %Cache

variable. The new() method of the module fills the created object once into 
this hash (keyed by the form name in your case). On further invocations of 
new(), it returns the cached object from %Cache.

### The module also contains a sub 

sub preload_cache {
  my ($class, @formnames)[EMAIL PROTECTED];
  my $dummy=__PACKAGE__->new($_)
    for @formnames;
}

### Then, in the startup.pl:

use Cfg;
Cfg::preload_cache(qw / formname1 formname2 ... /);

### and somewhere else in the app:

my $cfg=Cfg->new($formname);

### 

I have such a module in production and, since I was not sure if the config 
objects stay shared (not very important in my case), I checked the addresses 
on different usage. They seem to be always the same.

But I'm confused: The config objects are hold in object attributes of other 
objects. This means, the config objects reference counts increase - and I 
thought that this is an occasion where the object does not stay shared?!?

I can post the module if anybody wishes (good occasion for a code review).

hth, joe

Reply via email to