use strict; use warnings; use Data::Dump qw/pp dd/; my $goal = [3,1]; my ($nl,$nr) = @$goal; my @results; pathfinder( [0,0] ); # start pp \@$_ for @results; sub pathfinder { my ( $last )=@_; my ($l,$r) = @$last ; if ( $nl == $l ) { if ($nr == $r){ push @results,[ reverse @_]; } else { #warn "wrong",pp \@_; return } } # left pathfinder( [$l+1,$r ], @_ ) if $l != $nl; # right pathfinder( [$l+1,$r+1], @_ ) if $nr != $r; }