#!/usr/bin/perl -l use strict; use warnings; use Data::Dumper; sub ndim { my ($n,$m) = @_; return [(1) x $m] if $n==1; [map [@{ ndim($n-1,$m) }], 1..$m]; } $Data::Dumper::Indent=0; print Dumper ndim @$_ for [1,3], [2,2], [2,3], [3,3]; __END__ #### sub _ndim { my ($n,$m) = @_; return (1) x $m if $n==1; map [_ndim($n-1,$m)], 1..$m; } sub ndim { [_ndim @_] }