#!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; my @maengeA = qw/1 2 3/; print Dumper funcP(@maengeA); sub funcP { return () unless @_; return ( [ $_[0] ] ) unless @_ >= 1; map { my $first = shift @_; [$first], map { [ $first, @$_ ] } funcP(@_) } @_; }