#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @result = ( '' ); my @plan = ( [ qw/ CAT CAC / ], [ qw/ TGG / ], [ qw/ GTT GTC GTA GTG / ], [ qw/ CCT CCC CCA CCG / ], ); for my $step ( @plan ) { my @new_result; for my $suffix ( @$step ) { push @new_result, map { "$_$suffix" } @result; } @result = @new_result; } print Dumper(\@result);