#!/usr/bin/perl use warnings; use strict; use feature 'say'; use Data::Dumper; $Data::Dumper::Indent = 0; my $n = 3; my $k = 2; my @todo_list = ([ 0, [] ]); while (@todo_list) { my $todo = pop @todo_list; my $local_n = $todo->[0] +1; for my $curr_k (1..$k) { if ($local_n == $n) { print "x "; print Dumper(\@todo_list); print " -> "; say join(', ', @{$todo->[1]}, $curr_k); } else { push @todo_list, [ $local_n, [ @{$todo->[1]}, $curr_k ] ]; print Dumper(\@todo_list); print " : "; say join(', ', @{$todo->[1]}, $curr_k); } } }