sub amb($var,*@a) { "[{ @a.pick(*).map: {"||\{ $var = '$_' }"} }]"; } sub joins ($word1, $word2) { substr($word1,*-1,1) eq substr($word2,0,1) } '' ~~ m/ :my ($a,$b,$c,$d); <{ amb '$a', }> <{ amb '$b', }> <{ amb '$c', }> <{ amb '$d', }> { say "$a $b $c $d" } /;