foreach my $product (keys %sw) { print "Now processing $product\n"; my $version = '0'; my $release = '0'; my $description = $sw{$product}{'description'}; my $vendorUniqueKeyRef = $sw{$product}{'vendorUniqueKeyRef'}; my $swUniqueKey = $sw{$product}{'swUniqueKey'}; if ($sw{$product}{ProductVersion}) { if(exists($sw{$product}{ProductVersion}{name})) { # Push the immediate hash down, keyed by name # ignoring the duplicate name field $sw{$product}{ProductVersion} = { $sw{$product}{ProductVersion}{name} => $sw{$product}{ProductVersion} }; } foreach my $product_version_name (keys %{$sw{$product}{ProductVersion}}) { if($sw{$produt}{ProductVersion}{$product_version_name}{ProductReleaseVersion}) { if(exists($sw{$produt}{ProductVersion}{$product_version_name}{ProductReleaseVersion}{name})) { # Push the immediate hash down, keyed by name # ignoring the duplicate name field $sw{$produt}{ProductVersion}{$product_version_name}{ProductReleaseVersion} = { $sw{$produt}{ProductVersion}{$product_version_name}{ProductReleaseVersion}{name} => $sw{$produt}{ProductVersion}{$product_version_name}{ProductReleaseVersion}; }; } foreach my $product_version_release_name (keys %{$sw{$product}{ProductVersion}{$product_version_name}{ProductReleaseVersion}}) { # Print / store a record for the case that there is both a ProductVersion and ProductReleaseVersion } } else { # Print / store a record for the case that there is a ProductVersion but no ProductReleaseVersion } } } else { # Print / store a record for the case that there is no ProductVersion (and, therefore, no nested ProductReleaseVersion) } };