The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
PerlModule Apache2::Module

PerlPostConfigRequire @ServerRoot@/conf/post_config_startup.pl

### --------------------------------- ###
<Perl >
use Apache::Test ();
if (Apache::Test::have_module('mod_alias.c')) {
    push @Alias, ['/perl_sections', '@DocumentRoot@'];
    $Location{'/perl_sections'} = {
        'PerlInitHandler' => 'ModPerl::Test::add_config',
        'AuthType' => 'Basic',
        'AuthName' => 'PerlSection',
        'PerlAuthenHandler' => 'TestHooks::authen_basic',
    };
}
</Perl>

<Perl >
#Test tied %Location
use TestCommon::TiePerlSection ();
tie %Location, 'TestCommon::TiePerlSection';
$Location{'/tied'} = 'test_tied';

$Apache2::PerlSections::Save = 1;
$Location{'/perl_sections_saved'} = {
    'AuthName' => 'PerlSection',
    };
#This is a comment
$TestDirective::perl::comments="yes";
$TestDirective::perl::PACKAGE = __PACKAGE__;
</Perl>

<Perl >
$Apache2::PerlSections::Save = 1;
$TestDirective::perl::filename = __FILE__;
$TestDirective::perl::dollar_zero = $0;
$TestDirective::perl::line =  __LINE__;
</Perl>

#Handle re-entrant <Perl> sections
<Perl >
    use File::Spec;
    my $file = File::Spec->catfile('@ServerRoot@', 'conf', 'perlsection.conf');
    open my $fh, ">$file" or die "Can't open $file: $!";
    print $fh join "\n", ('<Perl >', '$TestDirective::perl::Included++;', '</Perl>');
    close $fh;
    $Include = $file;
</Perl>

#Deprecated access to Apache2::ReadConfig:: still works
<Perl >
use Apache::Test ();
if (Apache::Test::have_module('mod_alias.c')) {
    push @Apache2::ReadConfig::Alias, 
        ['/perl_sections_readconfig', '@DocumentRoot@'];
    $Apache2::ReadConfig::Location{'/perl_sections_readconfig'} = {
        'PerlInitHandler'   => 'ModPerl::Test::add_config',
        'AuthType'          => 'Basic',
        'AuthName'          => 'PerlSection',
        'PerlAuthenHandler' => 'TestHooks::authen_basic',
    };
}
</Perl>

<Perl >
$TestDirective::perl::base_server = Apache2::PerlSections->server;
</Perl>

<Perl >
# make sure that these are set at the earliest possible time
die '$ENV{MOD_PERL} not set!' unless $ENV{MOD_PERL};
die '$ENV{MOD_PERL_API_VERSION} not set!'
    unless $ENV{MOD_PERL_API_VERSION} == 2;
</Perl>

<VirtualHost perlsections>
  <Perl >
    $TestDirective::perl::vhost_server = Apache2::PerlSections->server;
  </Perl>
</VirtualHost>

### --------------------------------- ###
Perl $TestDirective::perl::worked="yes";

### --------------------------------- ###
=pod

The following line is not seen by Apache

PerlSetVar TestDirective__pod_hidden whatever

=over apache

PerlSetVar TestDirective__pod_over_worked yes

=back

This is some more pod

=cut

PerlSetVar TestDirective__pod_cut_worked yes

#This used to trigger a segfault on startup
#See http://thread.gmane.org/gmane.comp.apache.mod-perl/22750
<IfDefine PERL_USEITHREADS>
<VirtualHost inherit>
   PerlSwitches +inherit
   PerlOptions +Parent
   Perl 1
</VirtualHost>
</IfDefine>

#Single-line $PerlConfig
<Perl>
if (Apache::Test::have_module('mod_alias.c')) {
  $PerlConfig = "Alias /perl_sections_perlconfig_scalar @DocumentRoot@";
}
</Perl>

#Multi-line $PerlConfig
<Perl>
if (Apache::Test::have_module('mod_alias.c')) {
  $PerlConfig = "Alias /perl_sections_perlconfig_scalar1 @DocumentRoot@
                 Alias /perl_sections_perlconfig_scalar2 @DocumentRoot@
                ";
}
</Perl>

#@PerlConfig
<Perl>
if (Apache::Test::have_module('mod_alias.c')) {
  @PerlConfig = ("Alias /perl_sections_perlconfig_array1 @DocumentRoot@",
                 "Alias /perl_sections_perlconfig_array2 @DocumentRoot@",
                );
}
</Perl>