#!/usr/bin/perl -l use strict; use warnings; use Data::Dumper; use XML::Simple; my $bla = XMLin("primary.xml", ForceArray => [ qw(package) ], KeyAttr => [ ], ); foreach my $i (0 .. $#{$bla->{package}}) { # The combination of fields name, epoch, # version, release and arch are (unique). $bla->{temp}{sprintf("%s-%s-%s-%s-%s", $bla->{package}[$i]{name}, $bla->{package}[$i]{version}{ver}, $bla->{package}[$i]{version}{rel}, $bla->{package}[$i]{version}{epoch}, $bla->{package}[$i]{arch}, )} = $bla->{package}[$i]; } ($bla->{package}, $bla->{temp}) = ($bla->{temp}, $bla->{package}); delete($bla->{temp}); print Data::Dumper->Dump( [\$bla], [qw(*bla)]);