@_
)
y pueden retornar una lista. Para hacerlo,
Perl usa una pila de valroes escalares (SV
).
Cuando la subrutina es llamada los argumentos se ponen en la pila.
Recíprocamente, en el retorno, después de limpiar la
pila, los valores devueltos se empujan en la pila.
$ cat stack.pl #!/usr/bin/perl -w use strict; use Inline 'C'; my $n = shift || die "Uso:\n$0 number\n"; my @prefix_sum = &prefix_sum(1..$n); print "Suma de prefijos: @prefix_sum\n"; __END__ __C__ void prefix_sum(int n1, ... ) { Inline_Stack_Vars; # Inicialización de la pila int i; double ps[Inline_Stack_Items]; ps[0] = n1; for(i = 1; i < Inline_Stack_Items; i++) { ps[i] = SvNV(Inline_Stack_Item(i)) + ps[i-1]; } Inline_Stack_Reset; # limpiamos la pila for(i=0; i < Inline_Stack_Items; i++) { Inline_Stack_Push(newSVnv(ps[i])); # Empujamos los valores de retorno } Inline_Stack_Done; # Terminamos de manipular la pila }Ejecución:
$ ./stack.pl 20 Suma de prefijos: 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210
Casiano Rodríguez León