my %option = ( 1 => [ \ @acc ], 2 => [ \(@acc, @sec) ], 3 => [ \(@acc, @third) ], 4 => [ \(@acc, @sec, @third) ], ); ... my $opt = whatever(); my @selected = shuf_shuf_2_from_each($option{$opt}); ... sub shuf_shuf_2_from_each { my ($ar_input_arrays) = @_; return shuffle map { (shuffle @$_)[0,1] } @$ar_input_arrays; }