my @ff_fields = qw( callno lname fname ); my @incident_fields = qw( callno type date hr ); my %incidents_by_callno; while (@incidents) { my %incident; @incident{@incident_fields} = splice(@incidents, 0, 0+@incident_fields); push @{ $incidents_by_callno{ $incident{callno} } }, \%incident; } while (@ffs) { my %ff; @ff{@ff_fields} = splice(@ffs, 0, 0+@ff_fields); print("@ff{@ff_fields}\n"); for my $incident (@{ $incidents_by_callno{ $ff{callno} } }) { print(" @$incident{@incident_fields}\n"); } }