c:\@Work\Perl\monks>perl -le "use warnings; use strict; ;; use List::Util qw{ shuffle }; ;; sub shuf_shuf_2_from_each (\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@); ;; my @acc = qw( AX1 AX2 AX3 ); my @sec = qw( PB6 PB7 PB8 ); my @third = qw( XC2 XC8 XC1 ); ;; my %option = ( 1 => sub { return shuf_shuf_2_from_each @acc; }, 2 => sub { return shuf_shuf_2_from_each @acc, @sec; }, 3 => sub { return shuf_shuf_2_from_each @acc, @third; }, 4 => sub { return shuf_shuf_2_from_each @acc, @sec, @third; }, ); ;; for my $opt (1 .. 4) { my @selected = $option{$opt}->(); print qq{option $opt: @selected}; } ;; ;; sub shuf_shuf_2_from_each (\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) { return shuffle map { (shuffle @$_)[0,1] } @_; } " option 1: AX1 AX2 option 2: PB8 AX3 PB7 AX1 option 3: XC8 AX3 AX1 XC2 option 4: XC2 PB8 AX2 PB7 XC8 AX3