for my $p0 (1 .. 5-1) { for my $p1 ($p0+1 .. 5-1) { print( substr('12345', 0, $p0), "|", substr('12345', $p0, $p1-$p0), "|", substr('12345', $p1, 5-$p1), "\n", ); }} #### use Algorithm::Loops qw( NestedLoops ); my $num_objects = 5; my $num_containers = 3; my $str = join('', 1..$num_objects); NestedLoops( [ [ 1 .. $num_objects-1 ], (sub { [ $_[-1]+1 .. $num_objects-1 ] }) x ($num_containers-2) ], sub { my $str = $str; substr($str, $_, 0, '|') for reverse @_; print("$str\n"); }, ); #### 1|2|345 1|23|45 1|234|5 12|3|45 12|34|5 123|4|5