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