Apache-Config-Preproc
view release on metacpan or search on metacpan
lib/Apache/Config/Preproc.pm view on Meta::CPAN
package Apache::Config::Preproc;
use parent 'Apache::Admin::Config';
use strict;
use warnings;
use Carp;
use version 0.77;
our $VERSION = '1.07';
sub import {
my $class = shift;
if (defined(my $kw = shift)) {
if ($kw eq ':default') {
install_preproc_default()
} elsif ($kw eq ':optimized') {
install_preproc_optimized()
} else {
croak "Unrecognized import parameter: $kw"
}
}
if (@_) {
croak "Too many import parameters";
}
$class->SUPER::import();
}
sub new {
my $class = shift;
my $file = shift;
my $explist = Apache::Admin::Config::Tree::_get_arg(\@_, '-expand')
|| [ qw(include) ];
my $self = $class->SUPER::new($file, @_) or return;
bless $self, $class;
$self->{_filename} = $file;
$self->{_options} = \@_;
eval {
$self->_preproc($explist);
};
if ($@) {
$Apache::Admin::Config::ERROR = $@;
return;
}
return $self;
}
sub filename { shift->{_filename} }
sub dequote {
my ($self, $str) = @_;
if ($str =~ s/^"(.*)"$/$1/) {
$str =~ s/\\"/"/g;
}
return $str;
}
sub options { @{shift->{_options}} }
sub _preproc {
my ($self, $explist) = @_;
$self->_preproc_section($self,
[ map {
my ($mod,@arg);
if (ref($_) eq 'HASH') {
($mod,my $ref) = each %$_;
@arg = @$ref;
} elsif (ref($_) eq 'ARRAY') {
@arg = @$_;
$mod = shift @arg;
} else {
$mod = $_;
}
$mod = 'Apache::Config::Preproc::'.$mod;
(my $file = $mod) =~ s|::|/|g;
require $file . '.pm';
$mod->new($self, @arg)
} @$explist ]);
}
# As of version 0.95, the Apache::Admin::Config package provides no
# methods for iterating over all configuration file statements, excepting
# the select method with the -which => N argument, which returns Nth
# statement or undef if N is out of range. This method has two drawbacks:
#
# 1. It iterates over entire statement tree no matter what arguments are
# given (see Apache/Admin/Config.pm, lines 417-439)
# 2. It makes unnecessary memory allocations (ibid., line 437).
# 3. When N is out of range, the following warning is emitted
# in -w mode:
# Use of uninitialized value $_[0] in string at
( run in 2.106 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )