lhp@nereida:~/Lperl/src/inline$ cat -n pi.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use List::Util qw(sum);
 4  use Inline 'C';
 5
 6  my $p = shift || 4;
 7  my $n = shift || 10000;
 8  my $pi = sum(map { computepi($_, $n, $p) } 0..$p-1);
 9  print "Pi es: 3.14159265358979 ...\nValor calculado: $pi\n";
10
11  __END__
12  __C__
13
14  double computepi(int id, int N, int np) {
15    double sum, left;
16
17    int i;
18    for(i=id, sum = 0; i<N; i+=np) {
19      double x = (i + 0.5)/N;
20      sum += 4 / (1 + x*x);
21    }
22    sum /= N;
23    return (sum);
24  }
El código C puede almacenarse dentro del fichero  DATA  (esto es,
a partir de la aparición del marcador __END__
en una sección determinada por el marcador __C__.
También puede guardarse en una cadena ordinaria que es pasada a 
Inline:
lhp@nereida:~/Lperl/src/inline$ cat -n hello.pl
     1  #!/usr/local/bin/perl -w
     2  use strict;
     3  use Inline C => <<'END_C';
     4  void greet() {
     5    printf("Hello, world\n");
     6  }
     7  END_C
     8
     9  greet;
Ejecutémos dos veces el ejemplo del cálculo de lhp@nereida:~/Lperl/src/inline$ time pi.pl Pi es: 3.14159265358979 ... Valor calculado: 3.14159265442313 real 0m1.773s user 0m1.430s sys 0m0.270s lhp@nereida:~/Lperl/src/inline$ time pi.pl Pi es: 3.14159265358979 ... Valor calculado: 3.14159265442313 real 0m0.066s user 0m0.060s sys 0m0.010sVemos que la segunda vez tarda menos que la primera. Esto es así porque la primera vez Inline genera una librería que - por defecto - se guarda en el subdirectorio
__Inline:
lhp@nereida:~/Lperl/src/inline$ ls -ltr | tail -1
drwxr-xr-x  4 lhp lhp 4096 2007-02-20 10:39 _Inline
lhp@nereida:~/Lperl/src/inline$ tree _Inline/
_Inline/
|-- build
|-- config
`-- lib
    `-- auto
        `-- pi_pl_fa9f
            |-- pi_pl_fa9f.bs
            |-- pi_pl_fa9f.inl
            `-- pi_pl_fa9f.so
4 directories, 4 files
La gramática de  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
Casiano Rodríguez León
