-1 -1 -1 1 1 -1 1 1 #### | (-1, 1) | ( 1, 1) | ------------------- | (-1,-1) | ( 1,-1) | #### sub iterate_dim{ [map[map$_*2-1,split"",$_],map{substr unpack("B*",chr$_-1),-$_[0]}1..2**$_[0]] } #and call it: my $AoA = iterate_dim( 2 );