diff -Naurp AppConfig-1.65.orig/lib/AppConfig/File.pm AppConfig-1.65/lib/AppConfig/File.pm --- AppConfig-1.65.orig/lib/AppConfig/File.pm 2007-05-30 07:24:09.000000000 -0400 +++ AppConfig-1.65/lib/AppConfig/File.pm 2007-06-09 07:08:21.000000000 -0400 @@ -38,6 +38,7 @@ sub new { STATE => $state, # AppConfig::State ref DEBUG => $state->_debug(), # store local copy of debug PEDANTIC => $state->_pedantic, # and pedantic flags + BLOCKSEP => $state->_blocksep, # and block separator }; bless $self, $class; @@ -80,7 +81,7 @@ sub parse { my $flag; # take a local copy of the state to avoid much hash dereferencing - my ($state, $debug, $pedantic) = @$self{ qw( STATE DEBUG PEDANTIC ) }; + my ($state, $debug, $pedantic, $blocksep) = @$self{ qw( STATE DEBUG PEDANTIC BLOCKSEP ) }; # we want to install a custom error handler into the AppConfig::State # which appends filename and line info to error messages and then @@ -163,7 +164,7 @@ sub parse { s/\s+$//; # look for a [block] to set $prefix - if (/^\[([^\]]+)\]$/) { + if (/^\[\s*([^\]\s]+)\s*\]$/) { $prefix = $1; print STDERR "Entering [$prefix] block\n" if $debug; next; @@ -194,7 +195,7 @@ sub parse { $flag = $1; # $variable gets any $prefix - $variable = $prefix . '_' . $variable + $variable = $prefix . $blocksep . $variable if length $prefix; # if the variable doesn't exist, we call set() to give diff -Naurp AppConfig-1.65.orig/lib/AppConfig/State.pm AppConfig-1.65/lib/AppConfig/State.pm --- AppConfig-1.65.orig/lib/AppConfig/State.pm 2007-05-30 07:24:20.000000000 -0400 +++ AppConfig-1.65/lib/AppConfig/State.pm 2007-06-09 07:11:16.000000000 -0400 @@ -53,7 +53,7 @@ my %METHVARS; # internal values that AUTOLOAD should provide access to my %METHFLAGS; - @METHFLAGS{ qw( PEDANTIC ) } = (); + @METHFLAGS{ qw( PEDANTIC BLOCKSEP ) } = (); # variable attributes that may be specified in GLOBAL; my @GLOBAL_OK = qw( DEFAULT EXPAND VALIDATE ACTION ARGS ARGCOUNT ); @@ -94,6 +94,7 @@ sub new { PEDANTIC => 0, # return immediately on parse warnings EHANDLER => undef, # error handler (let's hope we don't need it!) ERROR => '', # error message + BLOCKSEP => '_', # separator between [block] and variable name }; bless $self, $class; @@ -504,8 +505,8 @@ sub _configure { next; }; - # CASE, CREATE and PEDANTIC are stored as they are - $opt =~ /^CASE|CREATE|PEDANTIC$/i && do { + # CASE, CREATE, PEDANTIC and BLOCKSEP are stored as they are + $opt =~ /^CASE|CREATE|PEDANTIC|BLOCKSEP$/i && do { $self->{ uc $opt } = $cfg->{ $opt }; next; }; @@ -1015,6 +1016,13 @@ instantiated with a reference to an App: DEBUG (and also PEDANTIC) values of the state at that time. Subsequent changes to the AppConfig::State debug value will not affect them. +=item BLOCKSEP + +When parsing configuration files that are grouped using constructions +like [block], this string parameter determines what is used to +separate the name of the block from the name of each variable +contained within it. If unspecified, BLOCKSEP defaults to '_'. + =item GLOBAL The GLOBAL option allows default values to be set for the DEFAULT, ARGCOUNT,