一、首先要了解的东西
1,创建perl模块
Package Example;
1;
2,配置、构造、测试和安装perl模块
配置、构造、测试和安装perl模块目前可以有三种实例来选择:
(1)ExtUtils-MakeMaker
ExtUtils-MakeMaker是写安装、测试一个不错的选择,常用工具h2xs一次性的创建一个实例,比如:
h2xs -X -n Foo::Bar
如果要创建一个XS的组件,则需要将选项-X换成-A;
另外,此种实例也可以用module-starter (Module-Starter)或modulemaker(ExtUtils-ModuleMaker)工具来生成,注意选项选择--builder=ExtUtils::MakeMaker或—eumm。
(2)Module-Build
Module-Build和以往Makefile.PL文件不一样,是一个纯perl的实例,不需要通过make来进行构造、测试和安装,但其基本方式和Makefile.PL一样,如下所示:
Perl Build.PL
./Build
./Build test
./Build install
此种实例可以使用module-starter (Module-Starter)或modulemaker(ExtUtils-ModuleMaker)工具来生成。
(3)Module-Install
Module-Install是ExtUtils-MakeMaker的高级版本。在ExtUtils-MakeMaker之上封装了一层,且增加了一些特征。
此种实例目前在CPAN上尤其最多,常用module-starter工具来生成。
3,XS的基本介绍
XS(xsub)是perl调用c/c++语言的一个接口编程语言。像这样的类似的接口编程语言还有SWIG(Simplified Wrapper and Interface Generator)、JNI(Java Native Interface)等。XS可以方便的写出perl扩展,一般编写perl扩展有三种方式,其中二种与XS有关:
(1)模板
比如用一些工具h2xs、module-starter来生成模板,开发者关注于XS本身,相对来说灵活多用;
(2)Inline模块
此perl模块可以让用户在perl程序中直接内嵌其他语言的代码,这些其他语言的代码会自动编译,然后在运行的时候自动加载。本质上Inline也是基于XS。
当perl代码调用C函数时,XS的基本工作模式如下:
① XS从perl的堆栈里面获取参数并转化成C语言识别的格式;
② 将转化后的参数传递给C函数并执行;
③ C函数的返回类型转化成perl的基本数据类型,压入 Perl 堆栈供程序读取,或者直接修改 Perl 所提供的变量值。
Perl提供了更多的变量定义和调用规则,相对来说更加灵活,但是也要和C语言一样考虑多种异常、内存的管理等等。
XS语言本身提供了编译器叫xsubpp,它根据typemaps来确定perl和C之间函数参数和返回值的基本数据类型转换。