As someone pointed out, these things can be very practical too.
#-----------
#!/usr/bin/perl
# my nifty cgi-bin
use strict;
use warnings;
our $big_table;
{
package XX;
no strict;
$var1 = 0;
}
sub sub1 {
my $key = shift;
unless (defined($big_table)) {
go_fill_it($big_table);
$XX::var1++;
}
if ($XX::var1) {
return $big_table->{$key};
}
return undef;
}
sub sub2 {
my $key = shift;
}
...
#----------
The $big_table var (and the underlying hash) will be initialised the
first time the above mod_perl handler (or cgi-bin script under mod_perl)
gets called /in this apache child/. Then it will retain its value
across multiple invocations (http requests) /within this apache child/,
as long as the child is alive (thus potentially saving hundreds of
reloads of the big table).
$XX::var1 on the other hand, is really local to this running script
instance, but global to the subs within it.
$key is really local to each sub in all respects.
Beauty is in the eyes of the beholder.
Perl and mod_perl may not be appreciated by the purists, but it's neat
what you can do with them.
I'd love to have something like the above that works /multi-platform/
*across* different apache children/threads.
Perhaps based on DBI...