#!/usr/bin/env perl use strict; use warnings; use Algorithm::Permute; use feature qw(say); use Data::Dump; my $n = [ 1, 2, 3, 3, 3, 4, 8 ]; my $p = Algorithm::Permute->new($n, 7); my $m3 = qr/(.)\1\1/; my $m2 = qr/(.)\1/; my @v; while ( my @r = $p->next ) { my $s = pack( "(A*)*", @r ); next if $s =~ /$m3/; next if $s =~ /$m2/; push( @v, $s ); } dd \@v; __END__