Hi again,
I'm still beating my head against perl sections. Using PerlSetVar
inside $Location seems really flaky - constants work, variables vanish.
And using $Location{$key} = {...} causes odd spurious multiple-matching
behaviour from a single matching hit. Frankly, I'm at a loss. I'm
about ready to give up. Anyone have any clue what the heck really goes
on inside <perl> sections? I will personally overnight-fedex a case of
fine microbrewery beer with my compliments to anyone who can show me how
to make this work. Really.
<IfModule mod_perl.c>
PerlSetEnv PERL5LIB /home/burkhold/perl/local/share/perl/5.6.0
PerlInitHandler Apache::StatINC
PerlModule Apache::DBI
# this should be put in a LocationMatch
<perl>
use IO::File;
use Data::Dump;
# convert this to per-user match later
my $filename = "/home/burkhold/perl/PerlSetVar";
my $file = IO::File->new("< $filename");
my @kv = ();
if ($file) {
while (<$file>) {
s/(\w+)\s*=\s*(.*)\s*$/push @kv, "$1 $2"/e;
}
$file->close();
}
my $mapping = getMapping();
my ($key, $value);
# The following works
# $Location{'/areaj'} = {
# PerlSetVar => \@kv,
# SetHandler => 'perl-script',
# PerlHandler => 'AreaJ::AreaJ'
# }
# But this doesn't - I get strange, multiple-retry behaviour
# each location match seemingly generating many others
while (($key, $value) = each(%$mapping)) {
$Location{$key} = {
# This works:
# PerlSetVar => [[ areajpassword => areaj ]],
# This doesn't, even though \@kv is *identical* to above constant defn.
# PerlSetVar => \@kv,
SetHandler => 'perl-script',
PerlHandler => $value
}
}
sub getMapping {
my $filename = "/home/burkhold/perl/mod_perl_mapping";
my $file = IO::File->new("< $filename");
my %result = {};
if ($file) {
while (<$file>) {
my ($key, $value);
s/(.*)\s*=\s*(.*)\s*$/($key, $value) = ($1,$2)/e;
print STDERR "mapping $key to $value\n";
$result{$key} = $value;
}
$file->close();
}
return \%result;
}
</perl>
mod_perl_mapping:
/areaj=AreaJ::AreaJ
/areaj-genpage=AreaJ::GenPage
/areaj-search=AreaJ::Search
/areaj-genimg=AreaJ::GenImage
/areaj-genfooter=AreaJ::GenFooter
/areaj-login=AreaJ::Login
/areaj-genlogin=AreaJ::GenLogin
/areaj-logout=AreaJ::Logout
/areaj-gensearch=AreaJ::GenSearch
/areaj-modmany=AreaJ::ModMany
/areaj-getpage=AreaJ::GetPage
/areaj-mark=AreaJ::Mark
/areaj-genpasswd=AreaJ::GenPasswd
/areaj-passwd=AreaJ::Passwd
/areaj-genmanageuser=AreaJ::GenManageUser
/areaj-selandredir=AreaJ::SelectAndRedirect
/areaj-genusertagtree=AreaJ::GenUserTagTree
/areaj-edit=AreaJ::EditImage
/areaj-gendelete=AreaJ::GenDelete
/areaj-delete=AreaJ::Delete
/areaj-genupload=AreaJ::GenUpload
/areaj-upload=AreaJ::Upload
/areaj-ensure=AreaJ::Ensure
/areaj-genheader=AreaJ::GenHeader
/areaj-gennewuser=AreaJ::GenNewUser
/areaj-newuser=AreaJ::NewUser
/home/burkhold/perl/PerlSetVar:
areajpassword=areaj