sub foo{ my $F= shift; @G = @_ ? @{foo(@_)} : [] x scalar @$F; foreach my $e (@$F){ push @H, map {[unshift @{$_}, "$e($i)"]} @G; } \@H; }