语法
- $x = 123;
- %x = (‘a’=>123,….); x{‘a’};
- %x = (‘a’, 123,….); x{‘a’};
- @x = (1, 2, 3, 4, 5); $x[0]; @x2 = @x; $count = @x; push pop
- ”” 转义其中的\x 及$x做为变量替换为值 ‘’ 不转义任何字符及变量
- $str = «“EOF”; …. EOF 转义\x 及 $x
- $str = «‘EOF’; …. EOF 不转义任何字符及变量
- $x =~ … 变量与模式匹配时返回true, 未匹配时返回false, $1匹配引用
- $x !~ … 变量与模式匹配时返回false, 未匹配时返回true,
- $0 $1 在(perl 脚本文件]之间的参数, perl -e xx.pl $0=-e $1=xx.pl
- $ARGV 数组 脚本后的参数 perl xx.pl a b $ARGV[0] a $ARGV[1] b
- @INC 所有perl module的查找路径 是数组 push(@INC, xx, …)在末尾添加
- use xx; 引用模块, 只在@INC中查找, 并必须是xx.pm
- require /a/b/xx.c 在use的基础上可以指定路径及后缀
C
- SV 类型代表Perl的标量
- AV 类型代表Perl的数组
- HV 类型代表Perl的Table
- RV 引用类型
- SV* newSViv(long i) 创建一个Perl的整型标量, 实际子类型 IV
- SV* newSVnv(double f) 创建一个Perl的浮点标量, 实际子类型 NV
- SV* newSVpn(char *str, int len) 创建一个Perl的字符串, 实际子类型 PV
- AV* newAV() 创建一个Perl的空数组
- AV* av_make(int num, SV**) 创建一个Perl数组,并赋值
- HV* newHV() 创建一个Perl的空Table
- sv_setiv(SV*, long) 修改整型标量
- sv_setnv(SV*, double) 修改整型浮点量
- sv_setpv(SV, char, int) 修改字符串
- SvIV(SV*) 修改Perl任意标量为整型标量
- SvNV(SV*) 修改Perl任意标量为浮点型标量
- SvPV(SV*) 修改Perl任意标量为字符串
- av_len(AV*) 获取Perl数组长度
- SV* av_fetch(AV*, int idx, int clear) 获取Perl数组中的值,clear!=0将设置为undef
- av_store(AV, int idx, SV) 设置Perl数组中的值
- av_push av_pop av_shift av_unshift
- hv_store(HV, char *key, u32 klen, SV, u32 hash) 设置Key Value
- SV** hv_fetch(HV*, char *key, u32 klen, i32 clear) 取值
- hv_iterinit(HV*) 开始迭代,返回kv个数
- HE* hv_iternextsv(HV*, char **key, i32 *klen) 返回迭代的下一个kv
- SV* perl_get_sv(char *name,int create)获取Perl中的标量
- AV* perl_get_av(char *name,int create)获取Perl中的数组
- HV* perl_get_hv(char *name,int create)获取Perl中的Table
- bool SvIOK(SV*) 判断是否为整型标量
- bool SvNOK(SV*) 判断是否为浮点型标量
- bool SvPOK(SV*) 判断是否为字符串
- bool SvROK(SV*) 判断是否为Table
- SVT SVTYPTE(SV*) 返回SVt_IV SVt_NV SVt_PV SVt_PVHV
- sv_dump(SV*) 打印标量值
- sv_2mortal(SV*) 将C创建的标量内存托管给Perl自动管理
- SV* sv_newmortal(SV*) 创建一个空的Perl托管SV变量
C调用Perl
- 堆栈操作
- dSP 初始化环境
- ENTER 开始作用域
- SAVETMPS 设置环境,以便临时变量在作用域的末尾会被自动删除
- PUSHMARK 记住堆栈的当前栈顶
- XPUSH* 将参数压入堆栈
- PUTBACK 表示参数的末尾
- perl_call_pv(char*, G_ARRAY); 调用Perl函数
- SPAGAIN 表示返回值回收的开始
- POP* 从堆栈获得值
- PUTBACK 表示返回值回收的末尾
- LEAVE 结束作用域