#!/usr/bin/perl
use 5.016;
use warnings;

sub f {
	my $n = 0;
	return sub {
		@_ < 1 ? $n++ : [ map{ __SUB__->(@_[1 .. $#_]) } (1 .. $_[0]) ]
	}->(@_);
}

use Data::Dumper;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Indent = 0;

my $aa = f(2, 3, 4);
say Dumper($aa);
say $aa->[1][2][3];
