for my $location (sort {$a cmp $b} keys %user_locations) { $worksheet->write($row++, $col, "$location ($user_locations{$location})", $format); my @sorted_users = sort { $users{$b}->{count} <=> $users{$a}->{count} } keys %users; for my $user (for my $user ((sort { $users{$b}->{count} <=> $users{$a}->{count} } keys %users) { next unless $users{$user}->{suffix} eq $user_locations{$location}; for (my $tmp=1; $tmp <= keys %sheet_layout; $tmp++) { $worksheet->write($row, $col++, $users{$user}->{$sheet_layout{$tmp}->[0]}, $format_r); } $col = 0; $row++; } $row++; }