On Fri, 12 May 2000, Stas Bekman wrote:
>
> Doug MacEachern wrote:
>
> > > OK, if this is the case, I'd prefer to have only one variable type -- an
> > > array - so $r->dir_config will always return a list. So if it's a
> > > sigular value, it'll be the first element. If you want it to be a hash
> > > -- you can have it as well. This makes thing simple and even eliminates
> > > the need for PerlSetVar, you can have only PerlAddVar for everything.
> >
> > my @values = $r->dir_config->get('Key');
> > and
> > my %hash = $r->dir_config->get('Key');
> >
> > already does that, regardless of using PerlSetVar or PerlAddVar.
> > although, PerlSetVar would end up with odd number of elements for %hash.
>
> Well, it doesn't work for me. It returns a stringified version of the ref
> to a hash or an array. I think you have already mentioned this before, I
> thought it was changed since than.
>
> <Perl>
>
> my %hash = qw(a b c d);
> push @{ $Location{"/perl"}->{PerlSetVar} }, [ hashkey => \%hash ];
>
> my @arr = qw(e f g h);
> push @{ $Location{"/perl"}->{PerlSetVar} }, [ arrkey => \@arr ];
>
> </Perl>
why do you expect that to work? PerlSetVar is TAKE2, so those references
are stringified (watch the output with MOD_PERL_TRACE s). you can't test
the multi-value dir_config->get without the PerlAddVar patch i posted
anyhow, unless you add at request time like the example below.
my $r = shift;
$r->send_http_header;
for (qw(one two)) {
$r->dir_config->add(Test => $_);
}
my @vars = $r->dir_config->get('Test');
print "@vars\n";