#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @array = ( { utterance => 'ja', score => 0.27 }, { utterance => 'nein', score => 0.75 }, { utterance => 'nein', score => 0.83 }, { utterance => 'ja', score => 0.53 }, { utterance => 'ja', score => 0.69 }, { utterance => 'nicht wirklich', score => 0.59 }, ); my %result; for my $elem(@array){ my $key = $elem->{utterance}; my $score = $elem->{score}; $result{$key} = {score => 0, max_score => 0, min_score => 10_000} unless exists $result{$key}; $result{$key}->{score} += $score; if($result{$key}->{max_score} < $score){ $result{$key}->{max_score} = $score; } if($result{$key}->{min_score} > $score){ $result{$key}->{min_score} = $score; } } print Dumper(\%result);