sub readSetup { open IN, "; close IN; foreach (@setupFile) { chomp; if (/^PROD/) { $Solution = $_; $Feature = 'none'; # Need to keep ordered list for viewing in UI push @Solutions, $Solution; } elsif ( $_ =~ /=/ ) { s/\s*=\s*/=/; ($property, $value) = split /=/, $_; $Installs{$Solution}{$Feature}{$property} = "$value"; } else { $Feature = "$_"; } } } sub print_it { for $Solution (@Solutions) { print "$Solution\n"; for $Feature ( keys %{ $Installs{$Solution} }) { $tab = "\t"; if ($Feature ne "none"){ print "$tab$Feature\n"; } else { $tab = "\t\t"; } for my $property ( keys %{ $Installs{$Solution}{$Feature} }) { print "$tab$property = $Installs{$Solution}{$Feature}{$property}\n"; } } print "\n"; } } #### PRODUCT1 FEATURE1_PRODUCT1 PROPERTY1_FEATURE1_PRODUCT1=VALUE1 PROPERTY2_FEATURE1_PRODUCT1=VALUE2 PROPERTY3_FEATURE1_PRODUCT1=VALUE3 PRODUCT2 PROPERTY1_PRODUCT2=VALUE1 PROPERTY2_PRODUCT2=VALUE2 PRODUCT3 FEATURE1_PRODUCT3 PROPERTY1_FEATURE1_PRODUCT3=VALUE1 PROPERTY2_FEATURE1_PRODUCT3=VALUE2 PROPERTY3_FEATURE1_PRODUCT3=VALUE3 FEATURE2_PRODUCT3 PROPERTY1_FEATURE1_PRODUCT3=VALUE1 FEATURE3_PRODUCT3 PROPERTY1_FEATURE1_PRODUCT3=VALUE1 PROPERTY2_FEATURE1_PRODUCT3=VALUE2 PROPERTY3_FEATURE1_PRODUCT3=VALUE3 PRODUCT4 PROPERTY1_PRODUCT4=VALUE1 PROPERTY2_PRODUCT4=VALUE2 PRODUCT5 #### PRODUCT1 FEATURE1_PRODUCT1 PROPERTY2_FEATURE1_PRODUCT1 = VALUE2 PROPERTY1_FEATURE1_PRODUCT1 = VALUE1 PROPERTY3_FEATURE1_PRODUCT1 = VALUE3 PRODUCT2 PROPERTY1_PRODUCT2 = VALUE1 PROPERTY2_PRODUCT2 = VALUE2 PRODUCT3 FEATURE2_PRODUCT3 PROPERTY1_FEATURE1_PRODUCT3 = VALUE1 FEATURE1_PRODUCT3 PROPERTY1_FEATURE1_PRODUCT3 = VALUE1 PROPERTY3_FEATURE1_PRODUCT3 = VALUE3 PROPERTY2_FEATURE1_PRODUCT3 = VALUE2 FEATURE3_PRODUCT3 PROPERTY1_FEATURE1_PRODUCT3 = VALUE1 PROPERTY3_FEATURE1_PRODUCT3 = VALUE3 PROPERTY2_FEATURE1_PRODUCT3 = VALUE2 PRODUCT4 PROPERTY2_PRODUCT4 = VALUE2 PROPERTY1_PRODUCT4 = VALUE1 PRODUCT5