mod_perl Problem mit httpd.conf

perl-fan

Grünschnabel
Hallo!

Auch wenn es unhöflich ist als Neuling gleich mit so einem Batzen zu kommen ... aber ich brauche dringend Hilfe! Ich versuche mit mod_perl (2) neue Directives für die httpd.conf zu basteln. Das funktioniert auch ganz gut, nur klappt das mit den Blöcken (wie <VirtualHost>) nicht. Ich kann die Daten im Block nicht auslesen!
Code:
PerlSwitches -wT -Mdiagnostics
PerlLoadModule My::ConfigModule
<VirtualHost 127.0.0.1:80>
    ServerName test.local
    ServerAlias *.test.local
    DocumentRoot /var/www/test
    SetHandler perl-script
    PerlMapToStorageHandler My::MapToStorageHandler
    PerlResponseHandler My::ResponseHandler
    <MeinBlock test>
      Wert1 testen
      Wert2 123
    </test>
</VirtualHost>
Code:
package My::ConfigModule;
use strict;

our @ISA qw(Apache2::Module);

use Apache2::CmdParms();
use Apache2::Const -compile qw(RSRC_CONF RAW_ARGS);
use Apache2::Directive();

use Data::Dumper();

sub SERVER_CREATE {
    bless({}, shift);
}

sub SETUP_HASH {
    my ($self, $parms, $arg) = @_;
    my $directive = $parms->directive->directive;
    $directive =~ s/^<//;
    $self->{"$directive"} = $arg;
    print Data::Dumper->Dump([
        $self->{"$directive"}
    ]);
    $self; 
}

Apache2::Module::add(__PACKAGE__, [{
    name => "<MeinBlock",
    func =>  __PACKAGE__."::SETUP_HASH",
    req_override =>  Apache2::Const::RSRC_CONF,
    args_how  =>  Apache2::Const::RAW_ARGS,
}]);

1;

Wenn ich jetzt den Server starte, bekomme ich nur "test>" vom Data::Dumper Module augegeben. Wie komme ich an Wert1 und Wert2?

Vielen Dank im Voraus! Ich hoffe mir kann da jemand helfen!
 
Tach auch!

Wenn Du die Daten als Hash haben möchtest, probier es mal so:
Code:
sub SETUP_HASH {
    my ($self, $parms, $arg) = @_;
    my $directive = $parms->directive->directive;
    $directive =~ s/^<//;
    $arg =~ s/>$//;
    $self->{"$directive"} = {
        $arg => $parms->directive()->as_hash()->{"$directive"}->{"$arg"}
    };
    print Data::Dumper->Dump([
        $self->{"$directive"}
    ]);
    $self; 
}
Greetz
Enum
 
Zuletzt bearbeitet:
Nachtrag:

Vorher solltest Du allerdings noch das mit dem schließenden Tag von <MeinBlock> richtig stellen: </test> wird hier nicht funktionieren... ;)

Gruß
Enum
 
Zurück