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