Este problema es tan simple que puedo sentir que viene el RTFM. Sin embargo, he estado buscando en los documentos (Inline, Inline-C, Inline-C-Cookbook) toda la mañana y no puedo encontrar la manera de resolver este problema.Perl: ¿cómo puedo poner todo mi código en línea C en un archivo separado?
Quiero usar C en línea, pero no quiero tener código C en el mismo archivo que mi código perl.
(A Emacs no le gusta tener dos idiomas en un archivo. En principio esto es una cuestión de conveniencia, pero en la práctica tengo que editar mi C en un archivo y luego copiarlo y pegarlo en mi script de Perl.) perl
Aquí está trabajando:
#!/usr/bin/perl
use Inline C => DATA;
use strict;
use warnings;
use List::Util qw(sum);
use feature qw(say);
my @array = (1..10);
say "native perl: ", sum(@array), ", Inline C: ", sum1(\@array);
__END__
__C__
double sum1(AV* array) {
int i;
double sum = 0.0;
for (i=0; i<=av_len(array); i++) {
SV** elem = av_fetch(array, i, 0);
if (elem != NULL)
sum += SvNV(*elem);
}
return sum;
}
(gracias a mobrule por sacarme este momento)
quiero mover todo el código C (o tanto como sea posible) en una. archivo de encabezado separado.
Lo que puedo hacer es poner sum1
en una cabecera, y hacer esto:
# same perl as above except now say sum2 instead of sum1
__END__
__C__
#include "sum.h"
double sum2(AV* array) {
sum1(array);
}
Esto es lo suficientemente buena como la que ya no tengo que editar el C en Perl-mode, pero me pregunto si hay ISN ¿Es una solución más elegante a este problema?
Eso se ve muy elegante. –
@Pedro Silva ojo del espectador y todo eso. solo me parece un poco redundante. – flies