2.63  - fix for rt.cpan.org#116340: do only consider a backslash
        as meta escape char, but not if it appears on it's own,
        as it happens on windows platforms. Thanks to for finding
	and tracking it down.

2.62  - fix rt.cpan.org#115326: Callback on 'pre_open' not called
        when glob expands to one include file

      - added patch by Niels van Dijke, which adds apache IFDefine
        support. Use -UseApacheIfDefine=>1 to enable, add defines
        with -Define and add <IFDefine ...> to your config, see
        pod for details.

      - added test case for the code.

      - fixed unindented half of the pod, which was largely no
        readable because of this. However, I wonder why this hasn't
        reported, seems nobody reads the docs :)

      - fixed tab/space issues here and there

2.61    - fix rt.cpan.org#113671: ignore utf BOM, if any and turn on
          UTF8 support if not yet enabled.

2.60    - fix rt.cpan.org#107929: added missing test config.

2.59    - fix rt.cpan.org#107108 by adding support for IncludeOptional.
    - clarified documentation on StoreDelimiter.

2.58    - bumbp version

2.57    - fix rt.cpan.org#104548, dont allow special chars like newline
      or < in keys, which leads to faile when saving.

2.56    - fix rt.cpan.org#95325

2.55    - fix rt.cpan.org#95314

2.54    - fixed rt.cpan.org#39814. changed the order of pre-processing
      in _read(): 1) remove comments, 2) check for continuation,
      3) remove empty lines.

2.53    - applied patch rt.cpan.org#68153, which adds a find() method to

    - fixed rt.cpan.org#79869 (in fact it has been fixed in 2.52
      but I forgot to mention it here).

    - applied spelling fixes rt.cpan.org 87072+87080.

    - fixed rt.cpan.org#89379

2.52    - applied pod patch rt.cpan.org#79603

        - fixed rt.cpan.org#80006, it tolerates now whitespaces
      after the block closing >

    - added -Plug parameter, which introduces plugin closures.
      idea from rt.cpan.org#79694.
      Currently available hooks are:
       pre_open, pre_read, post_read, pre_parse_value, post_parse_value

    - applied patch by Ville Skyttä, spelling fixes.

    - fixed rt.cpan.org#85080, more spelling fixes.

    - applied patch rt.cpan.org#85132, which fixes a deprecation
      warning in perl 5.18 and above. Fixes #85668 as well.

    - applied patch rt.cpan.org#85538, c-style comments
      are ignored inside here-docs.

    - fixed rt.cpan.org#82637, don't use indirect object syntax
      in pod and code.

 2.51   - fixed rt.cpan.org#77667 which resulted in invalid configs
          written to file when using save_file() and a named block,
          whose 2nd part starts with a /.

        - fixed rt.cpan.org#64169 by applying patch by Dulaunoy Fabrice.
          adds -NoEscape switch which turns off escaping of anything.

        - implemented suggestion of rt.cpan.org#67564 by adding 3 new
          parameters: -NormalizeOption, -NormalizeBlock and -NormalizeValue,
          which take a subroutine reference and change the block,
          option or value accordingly.

        - fixed rt.cpan.org#65860+76953 undefined value error.

    - fixed rt.cpan.org#63487 documentation error.

    - fixed rt.cpan.org#61302, now croak if the config file
      parameter is a directory and directory include is not
      turned on.

    - fixed rt.cpan.org#60429 META.yml typo

    - added new option -AllowSingleQuoteInterpolation, which
      turns on interpolation for variables inside single quotes.

    - added test case for the new option

    - fixed rt.cpan.org#56532, '#' missed during fix for
      56370 in 2.45.

    - added test case for this too

    - arg, uploaded the wrong file to pause, so another version
      bump up.

    - fixed typos in pod section for -ForceArray.

    - fixed rt.cpan.org#53759 by adding new option -ForceArray.
      when enabled a single config value enclosed in [] will become
      an array forcefully.

    - fixed typo in license: it is "artistic", not "artificial".

    - fixed rt.cpan.org#56370: there was a sort() call in _store()
      left, which lead to sorted arrays even if -SaveSorted were
      turned off.

    - fixed rt.cpan.org#50647 escaping bug. Now escaped $ or
      backslash characters are handled correctly (across save too)

    - fixed rt.cpan.org#52047, tied hash will remain tied
      when savong to a file.

    - fixed rt.cpan.org#54580, preserve single quotes during
      variable interpolation corrected. No more using rand()
      to mark single quotes but an incrementor instead.

    - fixed rt.cpan.org#42721+54583, empty config values will no
      more handed over to interpreting methods (as interpolate
      or autotrue and the like) but returned as undef untouched.

    - fixed rt.cpan.org#49023 by rolling back change in 2.43
       in line 158, regarding GLOB support.
    - fixed rt.cpan.org#40925, $indichar replaced by internal
      configuration variable EOFseparator, which contains
      a 256 bit SHA checksum of the date I fixed the bug.
      This will prevent future conflicts hopefully. In addition
      it makes it possible to make it customizable, if necessary,
      in a future release.

    - fixed rt.cpan.org#42721, return undef for empty values

    - fixed rt.cpan.org#42331, return undef for empty objects

    - fixed rt.cpan.org#44600, comments after blockname
      causes parser failure.

    - fixed rt.cpan.org#42287, whitespace at beginning or end
      of a quoted value gets lost after save().

    - fixed rt.cpan.org#46184, variables that were not previously
      defined are deleted when -InterPolateEnv is enabled. 

    - fixed bug in config loader for FileHandle objects, it
      supports now any compatible object. Hint by Ingo Schmiegel.

    - applied spelling- and speedup patches by Ville Skyttä.

    - applied documentation patch by Jordan Macdonald.

    - dist tarball for 2.41 missed t/Tie/LxHash.pm. Dammit.
          the File to the MANIFEST.

    - fixed rt.cpan.org#38635. apache-like include now supports
      quoted strings.

        - fixed rt.cpan.org#41748. saving config with -tie enabled
      now keeps the tie as documented.

    - added unit test for -tie. For this to work, a copy of
      Tie::LxHash module is delivered with Config::General
      source, but will not installed, in fact, it is only
      used for 'make test' (number 50)

    - fixed rt.cpan.org#39159. documentation of functional interface
          now reflects that qw$method) is now required.

    - applied patch by AlexK fixing rt.cpan.org#41030:
      if files are included by means of a glob pattern having the -IncludeGlob
      option activated, paths specified by the -ConfigPath option are being
      neglected when trying to spot the files. This patch fixes this

    - applied patch by fbicknel, fixes rt.cpan.org#41570: 
      An array of scalars (eg: option = [1,2,3]) cannot
      be used for interpolation (which element shall we use?!), so
      we ignore those types of lists and don't build a __stack for them.

    - fixed SplitDelimiter parser regex, it does no more consider
      non-whitespaces (\S+?) as the option name but anything
      before the delimiter (.+?), this fixes bug rt.cpan.org#36607,
      the fix of 2.39 were not sufficient. Thanks to
      Jeffrey Ratcliffe for pointing it out.

    - added new parameter -SaveSorted. The default value is 0,
      that means configs will be saved unsorted (as always),
      however if you want to save it sorted, turn this parameter
      to 1. Thanks to Herbert Breunung for the hint.

    - added complexity test, which checks a combination
      of various complex features of the parser.

    - fixed rt.cpan.org#35122. This one was one of the most
      intriguing bugs I've ever observed in my own code. The
      internal temporary __stack hashref were copied from one
      subhash to another to enable inheritance of variables.
      However, the hashes were copied by reference, so once a
      value changed later, that value were overwritten because
      the __stack in question were just a reference. I introduced
      a simple function _copy() which copies the contents of
      the __stack by value, which solved the bug.
      Conclusion: beware of perl hash refs!

    - fixed rt.cpan.org#36607, accept whitespaces in heredoc
      names if split delimiter is gues (equalsign or whitespace)

    - fixed rt.cpan.org#34080 (typo)

    - fixed rt.cpan.org#35766. Variables inside single quoted
      strings will no more interpolated (as the docu states).
      Also added test case for this.

    - fixed bug rt.cpan.org#33766. Checking for defined not true
      in ::Extended::AUTOLOAD().

    - added -UTF8 flag, which opens files in utf8 mode
      (suggested by KAORU, rt.cpan.org#35583)
      I decided not to add a test case for this, since perls
      utf8 support is not stable with all versions.

    - fixed rt.cpan.org#31529 variable inheritance failed
      with multiple named blocks.

    - fixed rt.cpan.org#33447, regex to catch variable
      names were too strict, now - . + or : are allowed too.

    - fixed rt.cpan.org#33385 and #32978 - using arrayrefs
      as param to -String didn't work anymore (sic)

    - fixed rt.cpan.org#33216 - variable stack were not properly
      re-constructed for pre-existing variables if 
      -MergeDuplicateOptions is turned on.

    - "fixed" rt.cpan.org#30199 - check for invalid and
      unsupported structures, especially mixing blocks
      and scalars with identical names.

    - added checks to 'make test' to test for the above

    - revoked patch of rt.cpan.org#27225, it broke running

    - fixed rt.cpan.org#30063 (and #27225!) by reimplementing
      the whole interpolation code. The internal stack is
      no more a class variable of the module but stored
      directly within the generated config hash and cleaned
      before returning to the user.

    - added (modified) patch rt.cpan.org#30063 to check
      if interpolation works with supplied default config

    - oh my goodness! For some unknown reason I deleted the
      Makefile.PL before packaging. Dammit. So, here it is

    - 'make test' failed under perl 5.5 because some prequisite
      modules were not found. So now I added all requirements
      to Makefile.PL, even if those modules are part of
      recent perls (beginning with 5.6). I could have also 
      added a 'use 5.6' to the code but this would users
      of perl5 exclude. This way they have the possibility
      to fix their installation. Hopefully.

      No code changes otherwise.

        - fixed rt.cpan.org#27271 - removed output file from

    - fixed rt.cpan.org#27225 - clear vars off the stack
          if entering a new block, so old vars get not re-used.

    - fixed rt.cpan.org#27110 - re-implemented support
          for arrayref as -String parameter.

    - fixed rt.cpan.org#24155 - relative include bug fixed.

    - applied patch by GWYN, (see fixed rt.cpan.org#27622)
       which allows the same file included multiple times.
      there is no loop detection if turned on. new option
      introduced: -IncludeAgain => 1 (default turned off).

    - added support for -IncludeAgain to directory include
      code too.

    - the directory globbing code used slashes to join
      directory and file names. changed this to use catfile()

    - fixed rt.cpan.org#26333 - just return $con if env var
      is undefined.

    - applied part of a patch supplied by Vincent Rivellino <vince@cuz.cx>
      which turns off explicit empty block support if in
      apache compatibility mode, see next.

    - added new option -ApacheCompatible, which makes the
      module behave really apache compatible by setting the
      required options.

    - a little bit re-organized the code, most of the stuff
      in new() is now outsourced into several extra subs to
      make maintenance of the code easier. The old new() sub
      in fact was a nightmare.

    - fixed a bug reported by Otto Hirr <otto.hirr@olabinc.com>:
      the _store() sub used sort() to sort the keys, which conflicts
      with sorted hashes (eg. tied using Tie::IxHash).

    - fixed tie bug reported by King, Jason <kingj@newsltd.com.au>,
      loading of the tie module didn't work.

    - fixed rt.cpan.org#24232 - import ENV vars only if defined

    - fixed rt.cpan.org#20742 - dont' overwrite a var if re-defined
      in current scope, interpolation failed for re-defined vars and used
      the value of the var defined in outer scope, not the current one.

    - fixed rt.cpan.org#17852 - a 0 as blockname were ignored. applied
      patch by SCOP to t/run.t to test for 0 in blocks.

    - applied most hints Perl::Critic had about Config::General:
      o the functions ParseConfig SaveConfig SaveConfigString must
        now imported implicitly. This might break existing code, but
        is easily to fix.
      o using IO::File instead of open().
      o General.pm qualifies for "stern" level after all.

    - added much more tests to t/run.t for 'make test'.

    - using Test::More now.

     - applied patches by Jason Rhinelander <jagerman@jagerman.com>:
          o bugfix: multiple levels if include files didn't
          work properly.

        o new option -IncludeDirectories, which allows
          to include all files of a directory. The directory
          must be specified by -ConfigFile as usual.

        o new option -IncludeGlob, which allows to
          use globs (wildcards) to include multiple files.

        o -ConfigPath can be speciefied using a single
          scalar value instead of an array if there is only
          one path.

        o bugfix: quotes from quoted block names were
          not removed properly.

        o fixes and updates for tests (make test) for
          the above patches.
       Thanks a lot Jason.

     - fixed number of tests in run.t

     - applied suggestion by Eric Kisiel <eric.kisiel@adelphia.com>:
       ::Extended::keys() returns an empty hash if the
       referring object is not hash.

     - fixed bug #14770, "Use of uninitialized value.." during
       environment variable interpolation.

     - applied patch by Branislav Zahradnik
       <brano@blueorange.sk> which adds -InterPolateEnv.
       This allows to use environment variables too. It
       implies -InterPolateVars.

     - added object list capability for the ::Extended::obj()
       method. If a certain key points to an array of
       hashrefs, then the whole arrayref is returned.
       Suggested by Alan Hodgkinson <alan@softxs.ch>.

     - applied patch by brian@kronos.com via rt.cpan.org
     - applied patch by plasmaball@pchome.com.tw via
       rt.cpan.org #5846

     - added new files to MANIFEST file.

      - added example.cfg to show the config format.

     - fixed bug in save(), now blocks containing whitespaces
       will be saved using quotes, in addition the parser observes
       the quoting feature, added portion about this to the pod
       doc. pointed out by Jeff Murphy <jcmurphy@jeffmurphy.org>.

     - added internal list of files opened so far to avoid
       reading in the same file multiple times.
       Suggested by Michael Graham.

     - added new method files() which returns the above list.

     - added workaround for foolish perl installation on
       debian systems (croak() doesn't work anymore as of
       5.8.4, it's a shame!)

     - applied patch by Michael Graham which fixes IncludeRelative
       feature, now an included file is being included relative
       to the calling config file, not the first one.

     - added 'make test' targets for files() and include
       stuff. (by Michael too)

         - bugfix in _store, which caused warning when saving
       a config containing empty hashes. Reported by 
       herbert breunung <deirdre_skye@web.de>.

     - removed applied patch (added in 2.20), there are no more
         calls to binmode(), this destroys portability, because
       perls determines itself wether it uses \n or \r\n as newline.
       Reported by herbert breunung too.
     - applied patch by Danial Pearce <danial@infoxchange.net.au>,
       scalars containing a backslash as the last character will
       be written out as here-doc when storing a config to disk.

     - fixed invalid regexp in _open() which circumvented
       explicit empty block to work when the block statement
       included whitespaces.
     - more finetuning in Makefile.PL for cleaning emacs'
       ~ files.

     - fixed bug with not working -IncludeRelative setting when
       including a config file. It were only included from the
       location relative to the underlying config if it were
       non-existent. reported by Dmitry Koteroff <dmitry@koteroff.ru>.

     - applied patch by Danial Pearce <danial@infoxchange.net.au>
       which adds the -BackslashEscape parameter to enable
       general escaping of special characters using the 

     - fixed bug reported by Harold van Oostrom <cpan@lanceerplaats.nl>:
       according to the documentation one can call new() with
       a hash-ref as its single parameter which would then
       used as the config. This didn't work and were fixed.

     - added feature suggested by Eric Andreychek <eric@openthought.net>:
       now block statements like this are allowed: "<directory blah/>"
       which is called an explicit empty block. This generates just
       an empty hash-ref and saves writing. In fact, internally it
       will be converted to:
          <directory blah>

     - fixed Makefile.PL: it cleans now files generated by 'make test'
       properly. reported by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>

     - updated MANIFEST (in fact I did this some years ago the last time!)
       also reported by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>

     - fixed Bug #3869 (rt.cpan.org) reported by
       "Mike Depot" <mdepot@comcast.net>

     - applied patch by Roland Huss <Roland.Huss@consol.de>,
       which fixes a bug with the -Tie option, sub-hashes of
       named blocks were not properly created (in fact, not

     - added documentation to Interpolated.pm that it does not
       interpolate variables in keys, see bug #3773 (rt.cpan.org).

         - still versioning problem, stupid white man ;-)
       Extended.pm is now 2.00 which *is* higher than 1.10.

         - incremented all version numbers because of cpan problem.
       no further changes. See Bug #3347 (rt.cpan.org).

     - fixed bug in new() used $this instead of $self for empty
       hashref creation if no config file given.

     - fixed bug reported by Stefano di Sandro <stedis@ulis.it>: in
        OOP mode (extended access) the obj() method returned the whole
       config object if the given key does not exist. Now it returns
       a new empty object.

     - added patch by David Dick <david_dick@iprimus.com.au> which
       sets $/ if it is unset.

     - added patch by David Dick <david_dick@iprimus.com.au> which
       calls the binmode() function in case the modules is being
       used under win32 systems. Read perldoc -f binmode for more
       informations on this issue.

     - added feature suggested by Chase Phillips <cmp@uiuc.edu>:
       the new() method has a new parameter -Tie which takes the
       name of a Tie class that each new hash should be based off
       of. This makes it possible to create a config hash with
       ordered contents across nested structures.

     - forgot to import 'catfile' from File::Spec. Bug reported by
        various people.

      - applied patch by Peter Tandler <Peter.Tandler@ipsi.fhg.de>
       which adds a search-path feature for include files.

     - applied patch by David Dick <david_dick@iprimus.com.au> which
       adds an auto launder capability to the module which makes it
       possible to use variables read by Config::General in a
       tainted perlscript (executed with -T) for open(), backtick calls
       or something which the taintmode considers to be dangerous.

     - fixed Bug #2325 (rt.cpan.org). The subs exported by File::Spec
       will now imported explicitly.
     - fixed warning about double my'ed variable $dummi, changed it
       to undef because it was unused anyway.

     - added File::Spec support which makes the modules more portable
       (i.e. on win32 systems),
       as suggested by Peter Tandler <Peter.Tandler@ipsi.fhg.de>.

     - applied patch by Michael Gray <mjg17@eng.cam.ac.uk> which
       fixes a bug in the Interpolate.pm submodule. A second variable,
       when immediately following the first, did not get interpolated,
       i.e. ${var1}${var2}.

 2.15    - fixed Bug in SaveConfig***, which didn't work.
         - applied patch by Robb Canfield <robb@canfield.com>,
       which fixes a bug in the variable interpolation
       scheme. It did not interpolate blocks nor
       blocknames. This patch fixes this. Patch slightly
       modified by me(interpolation on block and blocknames).
     - enhanced test for variable interpolation to
       reflect this.
     - added check if a named block occurs after the underlying
       block is already an array, which is not possible.
       perl cannot add a hashref to an array. i.e.:
          a = 1
          b = 1
       <bl blubber>
          c = 1
       As you can see, "<bl>" will be an array, and "blubber"
       cannot be stored in any way on this array.
       The module croaks now if such construct occurs.

 2.14    - fixed bug reported by Francisco Olarte Sanz
       <folarte@peoplecall.com>, which caused _parse to
       ignore blocks with the name "0": 
       <0> .. </0>, because it checked just if $block (the name
       between < and >) is true, and from the perl point
       of view "0" is not. Changed it to check for defined.
       Normally I avoid using 'defined' but in this case
       it will not be possible that $block contains the
       empty string, so defined is ok here.

 2.13    - fixed bug reported by Steffen Schwigon <schwigon@webit.de>.
       the parser was still active inside a here-doc, which
       cause weird results if the here-doc contained
       multiple <<XXX strings.
       this bug has been fixed by re-organizing the _read()
       method. now the parser is only active outside of

     - here-doc parsing bug fixed, which ignored the
       -SplitPolicy settings completely, now it is aware
       of the split policy

 2.12    - fixed cpan bugid #1768, stuff inside a hash given
       by the -DefaultConfig parameter was ignored by
       the new interpolation code, this has been fixed.

     - fixed another bug in the new interpolation code,
       which made variable global, the variable scope
       were ignored. Now a special constructed hash
       exists, which makes sure, that variables only
       valid within its correct scope.

 2.11     - heavy change in the variable interpolation code.
       Peter Sergeant <pete@clueball.com> reported this
       mis-behavior. The problem was that the whole hash
       was feeded to ::Interpolated.pm, but as we all
       know, perl hashes doesn't preserve the order. So,
       in our case the module sometimes was unable to
       resolve variablenames, because they were stored
       in a different location as it occurred in the config.
       The change is, that Config::General now calls
       ::Interpolate.pm (new sub: _interpolate()) itself
       directly on a per-key/value pair basis. The internal
       varstack is now stored on $this globally. So, now
       a variable will be known when it occurs. period :-)

 2.10    - added -StrictVars documentation section to the POD,
       which was missing.

         - fixed a formatting error in the POD documentation.

 2.09    - added bugfix in '#' comment parsing. If current state
       was within a block, then /^   #/ was not ignored as
       comment but instead added as variable. Reported by
       Lupe Christoph <lupe@lupe-christoph.de>

     - added -StrictObjects parameter support in the following
       ::Extended methods: hash() and value().

     - added better parameter checks in the ::Extended::obj()
       method. Its now no more possible to create a new (sub-)
       object from an undefined key or a key which does not
       point to a hash reference.

     - simplified storing of ConfigFile and ConfigHash in new()
       removed my variable $configfile.

     - the original parameter list will now be saved, which is
       required for ::Extended to create new objects with the
       same config as their parents.

 2.08    - added option -StrictVars, which causes Interpolate.pm to
       ignore undefined variables and replaces such occurrences
       with the emppty string.

     - applied patch by Stefan Moser <sm@open.ch>, which fixes
       some weird bevavior if -MergeDuplicateOptions was turned
       on, the parser croaked regardless -MergeDuplicateBlocks
       was set or not. Now the two options behave almost independent
       from each other, which allows one to merge duplicate
       blocks but duplicate options not.

     - changed behavior of setting -MergeDuplicateOptions which
       implied in previous versions -AllowMultiOptions to be
       false. Now this will only be done if the user does not
       set -AllowMultiOptions by himself. This allows one to
       have duplicate blocks which will be turned into an
       array but duplicate options to be merged.

     - applied patch by Matthias Pitzl <matthias@izb.net>, which    
       fixes a bug at parsing apache-like include directive
       (Include ...). It did not properly trim unnecessary whitespaces
       so that the filename to be included became invalid. This
       bug espessially occurred if one saved a hash containing
       a key/value pair like this: "Include" => "/etc/grs.cfg",
       which was then saved as "Include   /etc/grs.cfg", the
       parser returned "  /etc/grs.cfg" which, of course, does
       not exists. odd...

 2.07    - fixed cpan bugid #1351, SaveConfig contained a deprecated
           function call which caused the module to croak.
         - added feature request, if in extended mode (OOP turned
           on with -ExtendedAccess => 1 access to non-existent keys    
           caused a croak. While this is still the default behavior
           it is now possible to turn this off using -StrictObjects => 0.
         - added this to the related pod section in ::Extended.
         - fixed bug in new() which caused a couple of errors
           if the ConfigFile parameter is not set, or is set to
           undef. In this case it will now simply create an empty
         - fixed related bug in save_file() which will save "" to
           a file now if the config is uninitialized (i.e. the case
           mentioned below arrived).

 2.06    - added -SplitPolicy, -SplitDelimiter and -StoreDelimiter
     - removed whitespace support in keys in the default parser
       SplitPolicy 'guess', which was introduced in 2.02. Now
       I (re-)use the old regex I used before. if you need
       whitespaces in keys, use 'equalsign' as SplitPolicy.
     - the write_scalar() method uses the StoreDelimiter for
       separating options from values.
     - added -CComments to make it possible to turn c-comment
       parsing off.
     - added support for FileHandle objects as parameter to the
       -ConfigFile parameter. This makes it possible to use locking.

 2.05    - fixed bug in ::Extended. It exported for some weird
           reason I can't remember all of its methods. This included
       keys() exists() and delete(), which are perl internals.
       If one used keys() on a normal hash, then the ::Extended
       own keys() were used instead of perls own one. I removed
       the export line.

 2.04    - added RFE from rt.cpan.org (ID: 1218). the ::Interpolate
       module populates now uses of uninitialized variables in
       config files itself instead of just letting perl die().
       The other suggestion of the RFE was declined.

 2.03    - fixed bug in the _parse() routine (better: design flaw).
           after the last patch for allowing whitespaces in
       option names, it had a problem with here-docs which
       contained equal signs. option/value splitting resulted
       in weird output.

     - as a side effect of the bug fix below it is now
       possible to use equal signs inside quoted values, which
       will then be ignored, thus not used for splitting
       the line into an option/value assignment.

     - added a new test, which tests for all possible notations
       of option/value lines.

 2.02    - added patch by Jens Heunemann, which allows to use
           whitespaces in option names.

         - changed the save() calls in the test script (t/run.t)
           to save_file()

     - removed new() from ::Interpolated and ::Extended.
       This may break existing code (they will need to
       move to the flags of Config::General::new() ), but
       this decision must be made. The problem was that
       both the old way of directly using the subclasses
       and the enw way did not work together. So, now
       subclasses are only method holders and used by
       Config::General on request. Direct use of subclasses
       is prohibited. (you receive a warning if you do).

 2.01    - added -ConfigFile (in replace for -file) and
           -ConfigHash (in replace for -hash) to get a consistent
       parameter naming scheme. The old names are still
       supported for backward compatibility, but no more

         - the parameter -BaseHash has been dropped because
       -DefaultConfig already has the capabilities of
           defining a custom backing hash. The pod section for
       -DefaultConfig has been enhanced to reflect this.

     - README changed something. Removed the 'small' keyword,
       because the module isn't really small anymore :-)
       At least IMHO.

 2.00    - fixed a bug in the ::Extended::keys() method, which 
       caused a beloved "use of uninitialized ..." message.
       Reported by Danial Pearce <danial@infoxchange.net.au>.

         - Removed all deprecated methods (in fact, they are still
       there for shouting out a warn that its deprecated. But
       the pod sections are removed. These are NoMultiOptions()
       and save().

     - added two new parameters to new(): -InterPolateVars and
       -ExtendedAccess, which allows one to use the functionalites
       of the supplied submodules without the need to decide
       for one of them. This makes it possible to use variable
       interpolation and oop access in the same time. Suggested
       by Jared Rhine <jared@wordzoo.com>.

     - added new parameter -BaseHash which makes it possible
       to supply your own hash which stores the parsed contents
       of the config. This can be a tied hash o the like.
       Suggested by Jared Rhine <jared@wordzoo.com> too.

     - switched to release 2.00 because the above is a major

 1.36    - simplified new() parameter parsing, should be now a little
       bit better to understand.

     - added new parameter -DefaultConfig, which can hold a hashref
       or a string, which will be used to pre-define values
       of the resulting hash after parsing a config.
       Thanks to Mark Hampton <mark.hampton@qualis.com> for the

     - added new parameter -MergeDuplicateOptions, which allows
       one to overwrite duplicate options, which is required,
       if you turn on -DefaultConfig, because otherwise a
        array would be created, which is probably not what you

     - added patch by Danial Pearce <danial@infoxchange.net.au>
       to Config::General::Extended::keys(), which allows to
       retrieve the keys of the object itself (which was not
       directly possible before)

     - added patch by Danial Pearce <danial@infoxchange.net.au>
       to Config::General::Extended::value(), which allows to
       set a value to a (perlish-) nontrue value. This was a

     - added patch by Danial Pearce <danial@infoxchange.net.au>
       to Config::General::_parse_value, which fixes a bug in
       this method, which in prior versions caused values of
       "0" (zero digit) to be wiped out of the config.

     - added tests in t/run.t for the new default config feature.

 1.35    - the here-doc identifier in saved configs will now created
           in a way which avoids the existence of this identifier
       inside the here-doc, which if it happens results in
           weird behavior in the resulting config.

 1.34    - Danial Pearce <danial@infoxchange.net.au> reported a bug
           in _store(), which caused the module to create scalar
       entries even if the entry contained newlines. While
       Danial supplied a patch to fix this - thx(TM) - I
       did not apply it, because I "outsourced" this kind of
       stuff to the subroutine _write_scalar(), see next.

         - added internal methods _write_scalar() and _write_hash()
       to simplify _store(), which did the same thing more
       than once, which is a good time to create a sub which
       does the job.

         - fixed cut'n paste bug in General/Extended.pm reported by
       Danial Pearce <danial@infoxchange.net.au>, which caused
       Config::General::Extended::is_scalar() to return true even
       when the key you pass in is an array.

         - added new method Config::General::Extended::delete() suggested
       by Danial Pearce <danial@infoxchange.net.au>, which deletes
       the given key from the config.

 1.33    - fixed bug in _parse_value() which caused perl to complain
       with "Use of uninitialized value in..." if a value was

 1.32    - *argl* ... I forgot Interpolated.pm, don't know how that
           could happen, in 1.29 it was "lost". However - 
       I added it again now.
     - added patch by Peder Stray <peder@linpro.no> to
       the _store() method, which makes it possible to catch
       arrays of hashes to be stored correctly.
     - cleaned up the t/run.t testscript to reflect the
       changes (in fact I did not touch it since 1.18 or so).
     - added test number 16 to test variable interpolation
       using ::Interpolated in t/run.t.
     - fixed bug with new() parameter -AllowMultiOptions which
       generated a croak() if set to something other than "no".
     - changed Extended::save() to reflect the API change,
       it calls now save_file(). 

 1.31:   - i'm such a moron ... I forgot to do a make clean
           in 1.30, pf. So this is 1.31, which is clean.

 1.30:   - fixed typo, which made 1.29 unusable (undefined var %config)
         - added code to check if unknown parameters to new()
       has been supplied.

     - added 2 procedural functions ParseConf and SaveConf
     - added new parameters -AutoTrue and -FlagBits
     - added save_file() which replaces save(), which was
       weird implemented. If the user only supplied a hash
           as parameter to save(), then the first key was
       used as the filename and the rest was used
       as a config hash (which was then of an uneven size).
     - save_file() takes now instead of a hash a hash-ref
       and a filename. And the hashref is optional, since
       the object already contains a complete hash.
     - new method save_string() added, which returns the
       ready generated string instead of writing it to
       disk. The user can then save it himself.
     - POD updated.

     - added contributed sub module Config::General::Interpolated
       by "Wei-Hon Chen" <plasmaball@pchome.com.tw> with
       help from "Autrijus Tang" <autrijus@autrijus.org>
       which makes it possible to use variables inside
       config files.
     - _read() accepts now c-comments inside c-comments if
       they are on a single line.
     - _read() is now more tolerant to here-identifiers
       (the ends of here-docs), whitespaces right after
       such an identifier are allowed (i.e. "EOF  ").
     - _read() does now behave somewhat different with
       C-comments, they will be the first thing being
       processed in a config, so the parser really
       ignores everything inside C-comments. Previously
       it did not do that, for example here-docs has
       not been ignored.

 1.27:   - "make test" complained about uninitialized value
           in :146, which is now fixed.

 1.26:   - added filehandle capability to -file.
         - added -String parameter to new(), which allows
           one to supply the whole config as a string.
         - added -MergeDuplicateBlocks option, which causes
       duplicate blocks to be merged.

 1.25:   - include statements are now case insensitive
      - include statements may now also being used with
       indentation(leading and following whitespaces are
     - changed the end here-doc regexp from .+? to \S+?
       so "  <<include..." works as expected (this was a bug, imo)
     - added new option -IncludeRelative (idea contributed
       by Valerio_Valdez Paolini <paolini@students.cs.unibo.it>
       and Anton Luht <luht@ank.ru> :-)
       This allows to include files from the location of
       the configfile instead from the working directory.

 1.24:   - AllowMultiOptions printed out the value and not the
           option itself, if more than one of this particular
           option occurred.
         - added -UseApacheInclude feature, contributed by
           Thomas Klausner <domm@zsi.at>
         - fixed bug with multiple options stuff, which did not
           work with blocks or named blocks. Pointed out by
           Thomas Klausner <domm@zsi.at>, who meant it being
           feature request, but in fact it was a bug (IMHO).
     - Config::General does now contain also it's OO-sister
       Config::General::Extended, which is from now on
        no more available as an extra module, because it
       lived a shadowy existence.
     - finally(!) created a Changelog file (this one, yes).

 1.23:   - fixed bug, which removed trailing or leading " even
           no matching " was there.

 1.22:   - added a new option to new(): -LowerCaseNames, which
           lowercases all option-names (feature request)

 1.21:   - lines with just one "#" became an option array named
           "#" with empty entries, very weird, fixed

 1.20:   - added an if(exists... to new() for checking of the
           existence of -AllowMultiOptions.
         - use now "local $_" because it caused weird results
           if a user used $_ with the module.

 1.19:   - you can escape "#" characters using a backslash: "\#"
           which will now no more treated as a comment.
         - comments inside here-documents will now remain in the
           here-doc value.

history logs 1.17+1.18 are lost in space :-(

older history logs (stripped from CVS):

revision 1.16
date: 2000/08/03 16:54:58;  author: jens;  state: Exp;  lines: +4 -1
# Local Variables: ***
# perl-master-file: ../../webmin/index.pl ***
# End: ***

rangehängt, damit ich mit C-c d das debugging von jedem File aus 
einschalten kann
(siehe mein .emacs file)
revision 1.15
date: 2000/08/01 09:12:52;  author: tom;  state: Exp;  lines: +57 -68
added comments to _open() and _parse()
revision 1.14
date: 2000/07/31 18:07:12;  author: tom;  state: Exp;  lines: +44 -19
added <<include ... >> capability
revision 1.13
date: 2000/07/16 18:35:33;  author: tom;  state: Exp;  lines: +135 -10
added here-doc and multi-line feature, updated perlpod
revision 1.12
date: 2000/07/14 14:56:09;  author: tom;  state: Exp;  lines: +2 -2
bug fixed, it did not ignore options inside c-comments with a # comment 
@ the end of line
revision 1.11
date: 2000/07/14 11:26:04;  author: tom;  state: Exp;  lines: +42 -6
added C-Style comments and allow also comments after a statement.
revision 1.10
date: 2000/07/12 14:04:51;  author: tom;  state: Exp;  lines: +2 -1
i woas ned
revision 1.9
date: 2000/07/12 10:59:53;  author: jens;  state: Exp;  lines: +5 -3
hehe :)
revision 1.8
date: 2000/07/12 10:43:20;  author: tom;  state: Exp;  lines: +5 -2
fixed bug in getall(), which doubled %config if called more than onse.
revision 1.7
date: 2000/07/12 09:09:33;  author: tom;  state: Exp;  lines: +22 -24
100% Apache Config complete ;-) it supports now "named blocks"!
revision 1.6
date: 2000/07/11 23:43:03;  author: tom;  state: Exp;  lines: +72 -19
added named block support (<server holland>)
revision 1.5
date: 2000/07/11 20:49:47;  author: tom;  state: Exp;  lines: +2 -2
typo in pod corrected
revision 1.4
date: 2000/07/11 17:07:04;  author: tom;  state: Exp;  lines: +61 -7
a config file can now contain an option more than once and will be 
returned as array
revision 1.3
date: 2000/07/07 11:27:38;  author: cvs;  state: Exp;  lines: +2 -2
folgende Parameterform geht jetzt auch:
parameter=   blabla

vorher musste man
parameter =     blabla
revision 1.2
date: 2000/07/04 13:21:12;  author: tom;  state: Exp;  lines: +9 -4
added better failurehandling in case of missing block start/end statements
revision 1.1
date: 2000/07/04 12:52:09;  author: tom;  state: Exp;
implemented module and method getall, works as expected.