my @source = (1, 2, 3, 4); #### my @pair = (1,2); my @pair2 = (2,3); my @pair3 = (1,3); my @pair4 = (2,4); #### @pair -> [] @pair2 -> [1] @pair3 -> [2] @pair4 -> [1,3] #### sub get_output { my ($source,$pair) = @_; my @output = (); my %done = (); foreach my $pr (@{$pair}){ foreach my $sc (@{$source}){ next if ($pr <= $kn || $done{$sc}); push @output,$sc; $done{$sc} = 1; } } use Data::Dumper; print Dumper \@output; return @output; }