NativeCall 是 Perl 6 自带的标准模块，它提供了一系列功能方便了 Perl 6 和 C 的接口。

15.1. 调用函数

下面的 C 代码定义了一个名为 hellofromc 的函数。 这个函数的功能是在终端中打印 Hello from C 。它不接收参数，也不返回值。

ncitest.c #include <stdio.h> void hellofromc () { printf ( "Hello from C

" ); }

根据你的操作系统将上面的 C 代码编译成库文件。

在 Linux 中: gcc - c - fpic ncitest . c gcc - shared - o libncitest . so ncitest . o

在 Windows 中: gcc - c ncitest . c gcc - shared - o ncitest . dll ncitest . o

在你编译 C 库的路径下新建一个包含下面代码的 Perl 6 文件，并运行它。

ncitest.pl6 use NativeCall ; constant LIBPATH = "$*CWD/ncitest" ; sub hellofromc () is native ( LIBPATH ) { * } hellofromc ();

解释 首先，我们声明使用 NativeCall 模块。

接着，我们定义了一个常量 LIBPATH 来存储 C 库的路径。

其中 $*CWD 返回当前目录。

然后，我们定义一个新的 Perl 6 子例程 hellofromc 作为 C 库中名称同为 hellofromc 的 C 函数之包装函数。这个 C 库就是 LIBPATH 所对应的。

这些是通过使用 is native 特征实现的。

最后，调用我们的 Perl6 子例程。