Inline
para C
reconoce ciertas definiciones
de funciones del código C
. Esto es, Inline
generará
el código necesario para enlazar la llamada a la función como si fuera una
subrutina Perl. Si no puede reconocer la definición, esta será
ignorada sin que hayan mensajes de error o advertencia. No quedará
disponible en el ámbito de Perl, pero podrá aún seguir siendo
usada en el ámbito de C.
Inline busca por definiciones de funciones de estilo:
tipo_de_retorno nombre_de_funcion ( pares_tipo_identificador ) { cuerpo }
en las parejas tipo identificador, ...
puede usarse cualquier tipo
que esté definido en el fichero typemap
(véase sección 17.19).
Las siguientes definiciones no serán reconocidas:
Foo(int i) # no hay tipo de retorno int foo(float f) { # no existe definición en typemap para float int Foo(num) double num; { # la vieja sintáxis C no se soporta void Foo(void) { # void se permite solo para el retorno
Un ejemplo sencillo:
$ cat interfases.pl #!/usr/bin/perl -w (@ARGV == 3) or die "Modo de uso:\n$0 num num string\n"; my ($n1, $n2, $n3) = @ARGV; print "strlen($n3) + $n1 / $n2 = ",divide($n1, $n2, $n3),"\n"; use Inline C => <<'END_OF_CODE'; double divide(double n1, double n2, char * s) { return strlen(s)+n1/n2; } END_OF_CODEEjecución:
$ ./interfases.pl 9 2 "Hola" strlen(Hola) + 9 / 2 = 8.5 $ ./interfases.pl 9 3 "Mundo" strlen(Mundo) + 9 / 3 = 8 $ ./interfases.pl Modo de uso: ./interfases.pl num num string
Casiano Rodríguez León