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


Reply via email to