use Modern::Perl; my %test; my @predetermined; my @results; push @predetermined, int(rand(100)) for 1 .. 100; for my $element (@predetermined) { my $pair; { $pair = int(rand(100)); redo if $test{$element.'-'.$pair} or $test{$pair.'-'.$element} or $pair == $element; } $test{$element.'-'.$pair} = $test{$pair.'-'.$element} = 1; push @results, $element.'-'.$pair; } say for sort(@results);