my @array; while( my $nr = int rand 15){ if ( $nr > 5){ my %tmp = ( 'large' => 1, 'value' => $nr, ); push @array, \%tmp; } else{ my %tmp = ( 'small' => 1, 'value' => $nr, ); push @array, \%tmp; } } while (@array){ my $ref = shift @array; print "large: $ref->{'value'}\n" if $ref->{'large'}; }