Apache2::Directive - Perl API for manipulating the Apache configuration tree
use Apache2::Directive (); my $tree = Apache2::Directive::conftree(); my $documentroot = $tree->lookup('DocumentRoot'); my $vhost = $tree->lookup('VirtualHost', 'localhost:8000'); my $servername = $vhost->{'ServerName'}; use Data::Dumper; print Dumper $tree->as_hash; my $node = $tree; while ($node) { print $node->as_string; #do something with $node my $directive = $node->directive; my $args = $node->args; my $filename = $node->filename; my $line_num = $node->line_num; if (my $kid = $node->first_child) { $node = $kid; } elsif (my $next = $node->next) { $node = $next; } else { if (my $parent = $node->parent) { $node = $parent->next; } else { $node = undef; } } }
Apache2::Directive provides the Perl API for manipulating the Apache configuration tree
Apache2::Directive
Apache2::Directive provides the following functions and/or methods:
args
Get the arguments for the current directive:
$args = $node->args();
$node
Apache2::Directive object
$args
Arguments are separated by a whitespace in the string.
For example, in httpd.conf:
PerlSwitches -M/opt/lib -M/usr/local/lib -wT
And later:
my $tree = Apache2::Directive::conftree(); my $node = $tree->lookup('PerlSwitches'); my $args = $node->args;
$args now contains the string "-M/opt/lib -M/usr/local/lib -wT"
as_hash
Get a hash representation of the configuration tree, in a format suitable for inclusion in <Perl> sections.
$config_hash = $conftree->as_hash();
$conftree
The config tree to stringify
$config_hash
For example: in httpd.conf:
<Location /test> SetHandler perl-script PerlHandler Test::Module </Location>
my $tree = Apache2::Directive::conftree(); my $node = $tree->lookup('Location', '/test/'); my $hash = $node->as_hash;
$hash now is:
$hash
{ 'SetHandler' => 'perl-script', 'PerlHandler' => 'Test::Module', }
as_string
Get a string representation of the configuration node, in httpd.conf format.
$string = $node->as_string();
$string
my $tree = Apache2::Directive::conftree(); my $node = $tree->lookup('Location', '/test/'); my $string = $node->as_string;
$string is now:
SetHandler perl-script PerlHandler Test::Module
conftree
Get the root of the configuration tree:
$conftree = Apache2::Directive::conftree();
directive
Get the name of the directive in $node:
$name = $node->directive();
$name
filename
Get the filename the configuration node was created from:
$filename = $node->filename();
$filename
For example:
my $tree = Apache2::Directive::conftree(); my $node = $tree->lookup('VirtualHost', 'example.com'); my $filename = $node->filename;
$filename is now the full path to the httpd.conf that VirtualHost was defined in.
If the directive was added with add_config(), the filename will be the path to the httpd.conf that trigerred that Perl code.
add_config()
first_child
Get the first child node of this directive:
$child_node = $node->first_child;
$child_node
Returns the first child node of $node, undef if there is none
undef
line_num
Get the line number in a filename this node was created at:
$lineno = $node->line_num();
$lineno
lookup
Get the node(s) matching a certain value.
$node = $conftree->lookup($directive, $args); @nodes = $conftree->lookup($directive, $args);
$directive
The name of the directive to search for
Optional args to the directive to filter for
In LIST context, it returns all matching nodes.
In SCALAR context, it returns only the first matching node.
If called with only $directive value, this method returns all nodes from that directive. For example:
@Alias = $conftree->lookup('Alias');
returns all nodes for Alias directives.
Alias
If called with an extra $args argument, it returns only nodes where both the directive and the args matched. For example:
$VHost = $tree->lookup('VirtualHost', '_default_:8000');
next
Get the next directive node in the tree:
$next_node = $node->next();
$next_node
Returns the next sibling of $node, undef if there is none
parent
Get the parent node of this directive:
$parent_node = $node->parent();
parent_node
Returns the parent of $node, undef if this node is the root node
mod_perl 2.0 documentation.
mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0.
The mod_perl development team and numerous contributors.
To install mod_perl2, copy and paste the appropriate command in to your terminal.
cpanm
cpanm mod_perl2
CPAN shell
perl -MCPAN -e shell install mod_perl2
For more information on module installation, please visit the detailed CPAN module installation guide.