- 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.


git-svn-id: http://dev.catalyst.perl.org/repos/Config-General/trunk@65 be1acefe-a474-0410-9a34-9b3221f2030f
This commit is contained in:
Thomas von Dein
2009-10-10 16:43:54 +00:00
parent 61397677d3
commit 5f92f52e0a
8 changed files with 170 additions and 22 deletions

View File

@@ -1,7 +1,7 @@
#
# Config::General::Extended - special Class based on Config::General
#
# Copyright (c) 2000-2007 Thomas Linden <tlinden |AT| cpan.org>.
# Copyright (c) 2000-2008 Thomas Linden <tlinden |AT| cpan.org>.
# All Rights Reserved. Std. disclaimer applies.
# Artificial License, same as perl itself. Have fun.
#
@@ -23,7 +23,7 @@ use vars qw(@ISA @EXPORT);
use strict;
$Config::General::Extended::VERSION = "2.02";
$Config::General::Extended::VERSION = "2.03";
sub new {
@@ -294,7 +294,7 @@ sub AUTOLOAD {
my $key = $Config::General::Extended::AUTOLOAD; # get to know how we were called
$key =~ s/.*:://; # remove package name!
if ($value) {
if (defined $value) {
# just set $key to $value!
$this->{config}->{$key} = $value;
}
@@ -576,7 +576,7 @@ values under the given key will be overwritten.
=head1 COPYRIGHT
Copyright (c) 2000-2007 Thomas Linden
Copyright (c) 2000-2008 Thomas Linden
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
@@ -593,7 +593,7 @@ Thomas Linden <tlinden |AT| cpan.org>
=head1 VERSION
2.02
2.03
=cut

View File

@@ -66,6 +66,17 @@ sub _interpolate {
#
my ($this, $config, $key, $value) = @_;
# some dirty trick to circumvent single quoted vars to be interpolated
# we remove all quotes and replace them with unique random literals,
# which will be replaced after interpolation with the original quotes
# fixes bug rt#35766
my %quotes;
$value =~ s/(\'[^\']+?\')/
my $key = "QUOTE" . int(rand(1000)) . "QUOTE";
$quotes{ $key } = $1;
$key;
/gex;
$value =~ s{$this->{regex}}{
my $con = $1;
my $var = $3;
@@ -94,6 +105,12 @@ sub _interpolate {
}
}egx;
# re-insert unaltered quotes
# fixes bug rt#35766
foreach my $quote (keys %quotes) {
$value =~ s/$quote/$quotes{$quote}/;
}
return $value;
};
@@ -170,6 +187,7 @@ sub _clean_stack {
# recursively empty the variable stack
#
my ($this, $config) = @_;
#return $config; # DEBUG
foreach my $key (keys %{$config}) {
if ($key eq "__stack") {
delete $config->{__stack};