diff options
Diffstat (limited to 'bin/MakeProjectCreator/modules/Creator.pm')
-rw-r--r-- | bin/MakeProjectCreator/modules/Creator.pm | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/bin/MakeProjectCreator/modules/Creator.pm b/bin/MakeProjectCreator/modules/Creator.pm index 6d9d8c60f74..71e6bfecf3d 100644 --- a/bin/MakeProjectCreator/modules/Creator.pm +++ b/bin/MakeProjectCreator/modules/Creator.pm @@ -617,9 +617,20 @@ sub restore_state { my($self) = shift; my($state) = shift; - ## Overwrite each state value + ## Make a deep copy of each state value. That way our array + ## references and hash references do not get accidentally modified. foreach my $skey (@statekeys) { - $self->{$skey} = $$state{$skey}; + if (UNIVERSAL::isa($state->{$skey}, 'ARRAY')) { + my(@arr) = @{$state->{$skey}}; + $self->{$skey} = \@arr; + } + elsif (UNIVERSAL::isa($state->{$skey}, 'HASH')) { + my(%hash) = %{$state->{$skey}}; + $self->{$skey} = \%hash; + } + else { + $self->{$skey} = $state->{$skey}; + } } } |