use strict; use warnings; my $target = "cowboycatdog"; my @parts = qw(cow cowboy boy cat at do dog); search ($target, [@parts], []); #### sub search { my ($target, $parts, $used) = @_; #### unless (length $target) { print join ("-", @$used), "\n"; return; } #### for my $part (@$parts) { #### next unless 0 == index $target, $part; #### my $remainder = substr $target, length $part; #### search ($remainder, [grep {$part ne $_} @$parts], [@$used, $part]); } }