use strict; use warnings; my @data = (1, 2, 3); $, = "\n"; print trans1(\@data,2); BEGIN{ my $seq =[ sub {map {$_ + 1} @_}, sub {map {log($_)} @_}, sub {map {$_ * 3} @_}, ]; sub trans1 { my ($x, $n) = @_; return $seq->[ 0]->(@$x) if $n == 0; return $seq->[$n]->( trans1($x, $n-1, $seq) ); } }