Эта проблема настолько проста, что я чувствую приближение RTFM. Тем не менее, я все утро просматривал документы ( Inline , Inline-C , Inline-C-Cookbook )), и я не могу понять как решить эту проблему.
Я хочу использовать встроенный C, но не Я не хочу, чтобы код C был в том же файле, что и мой код Perl.
(Emacs не любит иметь два языка в одном файле. В принципе это вопрос удобства, но на практике мне приходится редактировать мой C в одном файле, а затем копировать и вставлять его в мой скрипт perl.)
Вот рабочий Perl:
#!/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;
}
(спасибо mobrule за то, что довел меня до этого места.)
Я хочу переместить весь код C (или как можно больше) в отдельный заголовочный файл.
Что я могу сделать, так это поместить sum1
в заголовок и сделать следующее:
# same perl as above except now say sum2 instead of sum1
__END__
__C__
#include "sum.h"
double sum2(AV* array) {
sum1(array);
}
Этого достаточно, поскольку мне больше не нужно редактировать C в perl-режиме, но мне интересно, есть ли там Разве не более элегантное решение этой проблемы?