Я ответил на тот же вопрос на perlmonks так что, надеюсь, он найдет ответ, который ему нравится.
use XML::Simple;
my $xml = new XML::Simple;
my $data = $xml->XMLin("data.xml");
my %by_code;
foreach my $dtc ( @{ $data->{DTC} } ) {
push @{ $by_code{ $dtc->{TroubleCode} } }, $dtc;
}
foreach my $code ( sort { $a <=> $b } keys %by_code ) {
print "trouble code: $code\n";
print "description:\n";
print map { $xml->XMLout( $_, RootName => 'DTC', NoAttr => 1, ) }
@{ $by_code{$code} };
}