1*b1cdbd2cSJim Jagielski#**************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski#**************************************************************
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielskipackage installer::converter;
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielskiuse installer::globals;
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski#############################
29*b1cdbd2cSJim Jagielski# Converter
30*b1cdbd2cSJim Jagielski#############################
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielskisub convert_array_to_hash
33*b1cdbd2cSJim Jagielski{
34*b1cdbd2cSJim Jagielski	my ($arrayref) = @_;
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski	my %newhash = ();
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
39*b1cdbd2cSJim Jagielski	{
40*b1cdbd2cSJim Jagielski		my $line = ${$arrayref}[$i];
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski		if ( $line =~ /^\s*([\w-]+?)\s+(.*?)\s*$/ )
43*b1cdbd2cSJim Jagielski		{
44*b1cdbd2cSJim Jagielski			my $key = $1;
45*b1cdbd2cSJim Jagielski			my $value = $2;
46*b1cdbd2cSJim Jagielski			$newhash{$key} = $value;
47*b1cdbd2cSJim Jagielski		}
48*b1cdbd2cSJim Jagielski	}
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski	return \%newhash;
51*b1cdbd2cSJim Jagielski}
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielskisub convert_hash_into_array
54*b1cdbd2cSJim Jagielski{
55*b1cdbd2cSJim Jagielski	my ($hashref) = @_;
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski	my @array = ();
58*b1cdbd2cSJim Jagielski	my $key;
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski	foreach $key (keys %{$hashref})
61*b1cdbd2cSJim Jagielski	{
62*b1cdbd2cSJim Jagielski		my $value = $hashref->{$key};
63*b1cdbd2cSJim Jagielski		my $input = "$key = $value\n";
64*b1cdbd2cSJim Jagielski		push(@array ,$input);
65*b1cdbd2cSJim Jagielski	}
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski	return \@array
68*b1cdbd2cSJim Jagielski}
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski#############################################################################
71*b1cdbd2cSJim Jagielski# Converting a string list with separator $listseparator
72*b1cdbd2cSJim Jagielski# into an array
73*b1cdbd2cSJim Jagielski#############################################################################
74*b1cdbd2cSJim Jagielski
75*b1cdbd2cSJim Jagielskisub convert_stringlist_into_array_without_linebreak_and_quotes
76*b1cdbd2cSJim Jagielski{
77*b1cdbd2cSJim Jagielski	my ( $includestringref, $listseparator ) = @_;
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski	my @newarray = ();
80*b1cdbd2cSJim Jagielski	my $first;
81*b1cdbd2cSJim Jagielski	my $last = ${$includestringref};
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
84*b1cdbd2cSJim Jagielski	{
85*b1cdbd2cSJim Jagielski		$first = $1;
86*b1cdbd2cSJim Jagielski		$last = $2;
87*b1cdbd2cSJim Jagielski		$first =~ s/\"//g;
88*b1cdbd2cSJim Jagielski		push(@newarray, $first);
89*b1cdbd2cSJim Jagielski	}
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski	$last =~ s/\"//g;
92*b1cdbd2cSJim Jagielski	push(@newarray, $last);
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski	return \@newarray;
95*b1cdbd2cSJim Jagielski}
96*b1cdbd2cSJim Jagielski
97*b1cdbd2cSJim Jagielski#############################################################################
98*b1cdbd2cSJim Jagielski# Converting a string list with separator $listseparator
99*b1cdbd2cSJim Jagielski# into an array
100*b1cdbd2cSJim Jagielski#############################################################################
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielskisub convert_stringlist_into_array
103*b1cdbd2cSJim Jagielski{
104*b1cdbd2cSJim Jagielski	my ( $includestringref, $listseparator ) = @_;
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski	my @newarray = ();
107*b1cdbd2cSJim Jagielski	my $first;
108*b1cdbd2cSJim Jagielski	my $last = ${$includestringref};
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
111*b1cdbd2cSJim Jagielski	{
112*b1cdbd2cSJim Jagielski		$first = $1;
113*b1cdbd2cSJim Jagielski		$last = $2;
114*b1cdbd2cSJim Jagielski		# Problem with two directly following listseparators. For example a path with two ";;" directly behind each other
115*b1cdbd2cSJim Jagielski		$first =~ s/^$listseparator//;
116*b1cdbd2cSJim Jagielski		push(@newarray, "$first\n");
117*b1cdbd2cSJim Jagielski	}
118*b1cdbd2cSJim Jagielski
119*b1cdbd2cSJim Jagielski	push(@newarray, "$last\n");
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski	return \@newarray;
122*b1cdbd2cSJim Jagielski}
123*b1cdbd2cSJim Jagielski
124*b1cdbd2cSJim Jagielski#############################################################################
125*b1cdbd2cSJim Jagielski# Converting a string list with separator $listseparator
126*b1cdbd2cSJim Jagielski# into an array
127*b1cdbd2cSJim Jagielski#############################################################################
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielskisub convert_stringlist_into_array_without_newline
130*b1cdbd2cSJim Jagielski{
131*b1cdbd2cSJim Jagielski	my ( $includestringref, $listseparator ) = @_;
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski	my @newarray = ();
134*b1cdbd2cSJim Jagielski	my $first;
135*b1cdbd2cSJim Jagielski	my $last = ${$includestringref};
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
138*b1cdbd2cSJim Jagielski	{
139*b1cdbd2cSJim Jagielski		$first = $1;
140*b1cdbd2cSJim Jagielski		$last = $2;
141*b1cdbd2cSJim Jagielski		push(@newarray, "$first");
142*b1cdbd2cSJim Jagielski	}
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski	push(@newarray, "$last");
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski	return \@newarray;
147*b1cdbd2cSJim Jagielski}
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski#############################################################################
150*b1cdbd2cSJim Jagielski# Converting a string list with separator $listseparator
151*b1cdbd2cSJim Jagielski# into a hash with values 1.
152*b1cdbd2cSJim Jagielski#############################################################################
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielskisub convert_stringlist_into_hash
155*b1cdbd2cSJim Jagielski{
156*b1cdbd2cSJim Jagielski	my ( $includestringref, $listseparator ) = @_;
157*b1cdbd2cSJim Jagielski
158*b1cdbd2cSJim Jagielski	my %newhash = ();
159*b1cdbd2cSJim Jagielski	my $first;
160*b1cdbd2cSJim Jagielski	my $last = ${$includestringref};
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
163*b1cdbd2cSJim Jagielski	{
164*b1cdbd2cSJim Jagielski		$first = $1;
165*b1cdbd2cSJim Jagielski		$last = $2;
166*b1cdbd2cSJim Jagielski		$newhash{$first} = 1;
167*b1cdbd2cSJim Jagielski	}
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski	$newhash{$last} = 1;
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski	return \%newhash;
172*b1cdbd2cSJim Jagielski}
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski#############################################################################
175*b1cdbd2cSJim Jagielski# Converting a string list with separator $listseparator
176*b1cdbd2cSJim Jagielski# into an array
177*b1cdbd2cSJim Jagielski#############################################################################
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielskisub convert_whitespace_stringlist_into_array
180*b1cdbd2cSJim Jagielski{
181*b1cdbd2cSJim Jagielski	my ( $includestringref ) = @_;
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski	my @newarray = ();
184*b1cdbd2cSJim Jagielski	my $first;
185*b1cdbd2cSJim Jagielski	my $last = ${$includestringref};
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski	while ( $last =~ /^\s*(\S+?)\s+(\S+)\s*$/)	# "$" for minimal matching
188*b1cdbd2cSJim Jagielski	{
189*b1cdbd2cSJim Jagielski		$first = $1;
190*b1cdbd2cSJim Jagielski		$last = $2;
191*b1cdbd2cSJim Jagielski		push(@newarray, "$first\n");
192*b1cdbd2cSJim Jagielski	}
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski	push(@newarray, "$last\n");
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski	return \@newarray;
197*b1cdbd2cSJim Jagielski}
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski#############################################################################
200*b1cdbd2cSJim Jagielski# Converting an array into a comma separated string
201*b1cdbd2cSJim Jagielski#############################################################################
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielskisub convert_array_to_comma_separated_string
204*b1cdbd2cSJim Jagielski{
205*b1cdbd2cSJim Jagielski	my ( $arrayref ) = @_;
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski	my $newstring = "";
208*b1cdbd2cSJim Jagielski
209*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
210*b1cdbd2cSJim Jagielski	{
211*b1cdbd2cSJim Jagielski		my $arrayentry = ${$arrayref}[$i];
212*b1cdbd2cSJim Jagielski		$arrayentry =~ s/\s*$//;
213*b1cdbd2cSJim Jagielski		$newstring = $newstring . $arrayentry . ",";
214*b1cdbd2cSJim Jagielski	}
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski	$newstring =~ s/\,\s*$//;
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski	return $newstring;
219*b1cdbd2cSJim Jagielski}
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski#############################################################################
222*b1cdbd2cSJim Jagielski# Converting an array into a space separated string
223*b1cdbd2cSJim Jagielski#############################################################################
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielskisub convert_array_to_space_separated_string
226*b1cdbd2cSJim Jagielski{
227*b1cdbd2cSJim Jagielski	my ( $arrayref ) = @_;
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski	my $newstring = "";
230*b1cdbd2cSJim Jagielski
231*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
232*b1cdbd2cSJim Jagielski	{
233*b1cdbd2cSJim Jagielski		my $arrayentry = ${$arrayref}[$i];
234*b1cdbd2cSJim Jagielski		$arrayentry =~ s/\s*$//;
235*b1cdbd2cSJim Jagielski		$newstring = $newstring . $arrayentry . " ";
236*b1cdbd2cSJim Jagielski	}
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski	$newstring =~ s/\s*$//;
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski	return $newstring;
241*b1cdbd2cSJim Jagielski}
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski#############################################################################
244*b1cdbd2cSJim Jagielski# The file name contains for some files "/". If this programs runs on
245*b1cdbd2cSJim Jagielski# a windows platform, this has to be converted to "\".
246*b1cdbd2cSJim Jagielski#############################################################################
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielskisub convert_slash_to_backslash
249*b1cdbd2cSJim Jagielski{
250*b1cdbd2cSJim Jagielski	my ($filesarrayref) = @_;
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$filesarrayref}; $i++ )
253*b1cdbd2cSJim Jagielski	{
254*b1cdbd2cSJim Jagielski		my $onefile = ${$filesarrayref}[$i];
255*b1cdbd2cSJim Jagielski		if ( $onefile->{'Name'} ) { $onefile->{'Name'} =~ s/\//\\/g; }
256*b1cdbd2cSJim Jagielski	}
257*b1cdbd2cSJim Jagielski}
258*b1cdbd2cSJim Jagielski
259*b1cdbd2cSJim Jagielski############################################################################
260*b1cdbd2cSJim Jagielski# Creating a copy of an existing file object
261*b1cdbd2cSJim Jagielski# No converter
262*b1cdbd2cSJim Jagielski############################################################################
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielskisub copy_item_object
265*b1cdbd2cSJim Jagielski{
266*b1cdbd2cSJim Jagielski	my ($olditemhashref, $newitemhashref) = @_;
267*b1cdbd2cSJim Jagielski
268*b1cdbd2cSJim Jagielski	foreach $key (keys %{$olditemhashref})
269*b1cdbd2cSJim Jagielski	{
270*b1cdbd2cSJim Jagielski		my $value = $olditemhashref->{$key};
271*b1cdbd2cSJim Jagielski		$newitemhashref->{$key} = $value;
272*b1cdbd2cSJim Jagielski	}
273*b1cdbd2cSJim Jagielski}
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski#################################################################
276*b1cdbd2cSJim Jagielski# Windows pathes must not contain the following structure:
277*b1cdbd2cSJim Jagielski# c:\dirA\dirB\..\dirC
278*b1cdbd2cSJim Jagielski# This has to be exchanged to
279*b1cdbd2cSJim Jagielski# c:\dirA\dirC
280*b1cdbd2cSJim Jagielski#################################################################
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielskisub make_path_conform
283*b1cdbd2cSJim Jagielski{
284*b1cdbd2cSJim Jagielski	my ( $path ) = @_;
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski	my $oldpath = $path;
287*b1cdbd2cSJim Jagielski
288*b1cdbd2cSJim Jagielski	while ( $path =~ /(^.*)(\Q$installer::globals::separator\E.*?[^\.])(\Q$installer::globals::separator\E\.\.)(\Q$installer::globals::separator\E.*$)/ )
289*b1cdbd2cSJim Jagielski	{
290*b1cdbd2cSJim Jagielski		my $part1 = $1;
291*b1cdbd2cSJim Jagielski		my $part2 = $4;
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski		# $2 must not end with a "." ! Problem with "..\.."
294*b1cdbd2cSJim Jagielski
295*b1cdbd2cSJim Jagielski		$path = $part1 . $part2;
296*b1cdbd2cSJim Jagielski	}
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski	return $path;
299*b1cdbd2cSJim Jagielski}
300*b1cdbd2cSJim Jagielski
301*b1cdbd2cSJim Jagielski#################################################################
302*b1cdbd2cSJim Jagielski# Copying an item collector
303*b1cdbd2cSJim Jagielski# A reference to an array consisting of references to hashes.
304*b1cdbd2cSJim Jagielski#################################################################
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielskisub copy_collector
307*b1cdbd2cSJim Jagielski{
308*b1cdbd2cSJim Jagielski	my ( $oldcollector ) = @_;
309*b1cdbd2cSJim Jagielski
310*b1cdbd2cSJim Jagielski	my @newcollector = ();
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski	foreach my $oldhash (@$oldcollector)
313*b1cdbd2cSJim Jagielski	{
314*b1cdbd2cSJim Jagielski		my %newhash = ();
315*b1cdbd2cSJim Jagielski
316*b1cdbd2cSJim Jagielski		while (my ($key, $value) = each %$oldhash)
317*b1cdbd2cSJim Jagielski		{
318*b1cdbd2cSJim Jagielski			$newhash{$key} = $value;
319*b1cdbd2cSJim Jagielski		}
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski		push(@newcollector, \%newhash);
322*b1cdbd2cSJim Jagielski	}
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski	return \@newcollector;
325*b1cdbd2cSJim Jagielski}
326*b1cdbd2cSJim Jagielski
327*b1cdbd2cSJim Jagielski#################################################################
328*b1cdbd2cSJim Jagielski# Copying an array
329*b1cdbd2cSJim Jagielski#################################################################
330*b1cdbd2cSJim Jagielski
331*b1cdbd2cSJim Jagielskisub copy_array_from_references
332*b1cdbd2cSJim Jagielski{
333*b1cdbd2cSJim Jagielski	my ( $arrayref ) = @_;
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski	my @newarray = ();
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
338*b1cdbd2cSJim Jagielski	{
339*b1cdbd2cSJim Jagielski		push(@newarray, ${$arrayref}[$i]);
340*b1cdbd2cSJim Jagielski	}
341*b1cdbd2cSJim Jagielski
342*b1cdbd2cSJim Jagielski	return \@newarray;
343*b1cdbd2cSJim Jagielski}
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski###########################################################
346*b1cdbd2cSJim Jagielski# Copying a hash
347*b1cdbd2cSJim Jagielski###########################################################
348*b1cdbd2cSJim Jagielski
349*b1cdbd2cSJim Jagielskisub copy_hash_from_references
350*b1cdbd2cSJim Jagielski{
351*b1cdbd2cSJim Jagielski	my ($hashref) = @_;
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski	my %newhash = ();
354*b1cdbd2cSJim Jagielski	my $key;
355*b1cdbd2cSJim Jagielski
356*b1cdbd2cSJim Jagielski	foreach $key (keys %{$hashref})
357*b1cdbd2cSJim Jagielski	{
358*b1cdbd2cSJim Jagielski		$newhash{$key} = $hashref->{$key};
359*b1cdbd2cSJim Jagielski	}
360*b1cdbd2cSJim Jagielski
361*b1cdbd2cSJim Jagielski	return \%newhash;
362*b1cdbd2cSJim Jagielski}
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski#################################################################
365*b1cdbd2cSJim Jagielski# Combining two arrays, first wins
366*b1cdbd2cSJim Jagielski#################################################################
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielskisub combine_arrays_from_references_first_win
369*b1cdbd2cSJim Jagielski{
370*b1cdbd2cSJim Jagielski	my ( $arrayref1, $arrayref2 ) = @_;
371*b1cdbd2cSJim Jagielski
372*b1cdbd2cSJim Jagielski	my $hashref1 = convert_array_to_hash($arrayref1);
373*b1cdbd2cSJim Jagielski	my $hashref2 = convert_array_to_hash($arrayref2);
374*b1cdbd2cSJim Jagielski	my %commonhash = ();
375*b1cdbd2cSJim Jagielski	my @newarray = ();
376*b1cdbd2cSJim Jagielski
377*b1cdbd2cSJim Jagielski	# starting with second hash
378*b1cdbd2cSJim Jagielski	foreach my $key ( keys %{$hashref2} ) { $commonhash{$key} = $hashref2->{$key}; }
379*b1cdbd2cSJim Jagielski	# overwriting with first hash
380*b1cdbd2cSJim Jagielski	foreach my $key ( keys %{$hashref1} ) { $commonhash{$key} = $hashref1->{$key}; }
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski	# Creating the new array
383*b1cdbd2cSJim Jagielski	foreach my $key ( keys %commonhash ) { push(@newarray, "$key $commonhash{$key}\n"); }
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski	return \@newarray;
386*b1cdbd2cSJim Jagielski}
387*b1cdbd2cSJim Jagielski
388*b1cdbd2cSJim Jagielski#################################################################
389*b1cdbd2cSJim Jagielski# Combining two arrays
390*b1cdbd2cSJim Jagielski#################################################################
391*b1cdbd2cSJim Jagielski
392*b1cdbd2cSJim Jagielskisub combine_arrays_from_references
393*b1cdbd2cSJim Jagielski{
394*b1cdbd2cSJim Jagielski	my ( $arrayref1, $arrayref2 ) = @_;
395*b1cdbd2cSJim Jagielski
396*b1cdbd2cSJim Jagielski	my @newarray = ();
397*b1cdbd2cSJim Jagielski
398*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref1}; $i++ )
399*b1cdbd2cSJim Jagielski	{
400*b1cdbd2cSJim Jagielski		push(@newarray, ${$arrayref1}[$i]);
401*b1cdbd2cSJim Jagielski	}
402*b1cdbd2cSJim Jagielski
403*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref2}; $i++ )
404*b1cdbd2cSJim Jagielski	{
405*b1cdbd2cSJim Jagielski		push(@newarray, ${$arrayref2}[$i]);
406*b1cdbd2cSJim Jagielski	}
407*b1cdbd2cSJim Jagielski
408*b1cdbd2cSJim Jagielski	return \@newarray;
409*b1cdbd2cSJim Jagielski}
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski#################################################################
412*b1cdbd2cSJim Jagielski# Returning the current ending number of a directory
413*b1cdbd2cSJim Jagielski#################################################################
414*b1cdbd2cSJim Jagielski
415*b1cdbd2cSJim Jagielskisub get_number_from_directory
416*b1cdbd2cSJim Jagielski{
417*b1cdbd2cSJim Jagielski	my ( $directory ) = @_;
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski	my $number = 0;
420*b1cdbd2cSJim Jagielski
421*b1cdbd2cSJim Jagielski	if ( $directory =~ /\_(\d+)\s*$/ )
422*b1cdbd2cSJim Jagielski	{
423*b1cdbd2cSJim Jagielski		$number = $1;
424*b1cdbd2cSJim Jagielski	}
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski	return $number;
427*b1cdbd2cSJim Jagielski}
428*b1cdbd2cSJim Jagielski
429*b1cdbd2cSJim Jagielski#################################################################
430*b1cdbd2cSJim Jagielski# Replacing separators, that are included into quotes
431*b1cdbd2cSJim Jagielski#################################################################
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielskisub replace_masked_separator
434*b1cdbd2cSJim Jagielski{
435*b1cdbd2cSJim Jagielski	my ($string, $separator, $replacementstring) = @_;
436*b1cdbd2cSJim Jagielski
437*b1cdbd2cSJim Jagielski	$string =~ s/\\\Q$separator\E/$replacementstring/g;
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski	return $string;
440*b1cdbd2cSJim Jagielski}
441*b1cdbd2cSJim Jagielski
442*b1cdbd2cSJim Jagielski#################################################################
443*b1cdbd2cSJim Jagielski# Resolving separators, that were replaced
444*b1cdbd2cSJim Jagielski# in function mask_separator_in_quotes
445*b1cdbd2cSJim Jagielski#################################################################
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielskisub resolve_masked_separator
448*b1cdbd2cSJim Jagielski{
449*b1cdbd2cSJim Jagielski	my ($arrayref, $separator, $replacementstring) = @_;
450*b1cdbd2cSJim Jagielski
451*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
452*b1cdbd2cSJim Jagielski	{
453*b1cdbd2cSJim Jagielski		${$arrayref}[$i] =~ s/$replacementstring/$separator/g
454*b1cdbd2cSJim Jagielski	}
455*b1cdbd2cSJim Jagielski}
456*b1cdbd2cSJim Jagielski
457*b1cdbd2cSJim Jagielski1;
458