这个问题很简单,我可以感受到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让我这么远)
我可以做的是把sum1放在一个标题中,并做到这一点:
# same perl as above except now say sum2 instead of sum1 __END__ __C__ #include "sum.h" double sum2(AV* array) { sum1(array); }
这是不够的,因为我不再需要在perl模式下编辑C,但是我想知道这个问题是否没有更优雅的解决方案?