use warnings; use strict; use PDL; my @funcs = ( '1/(0.5 + 0.02 * $i*$i) * cos($i)', '1/(0.5 + 0.02 * $i*$i) * cos($i)', ); my $surface = initPDL (\&shape, (10) x @funcs); ... sub shape { my @values = @_; my $sum = 0; for my $idx (0 .. $#values) { my $i = $values[$idx]; my $value = eval $funcs[$idx]; $sum += $value * $value; } return sqrt ($sum); }