我希望尝试一下Perl解析器的操作。看起来各种B::Hooks模块是人们使用的工具。我在想: 对于一个没有XS经验的人来说,最好从哪里入手?有相关的博客文章吗? 创建一个新的运算符需要多少工作量?例如: $a~>one~>two~>three ~> 将像 -&...
这在5.8和5.10中对我起作用,但在5.12中,我的代码会创建这个奇怪的非qr对象:# running "print Dumper($regex)" $VAR1 = bless( do{\(my $o = '')}, 'Regexp' ); 如果打印一个不是由我的代码创建的qr//,它看起来...
我有一个小的Perl程序。该程序加载了一个模块,该模块使用XSLoader加载了一个.so文件。这个Perl程序在Linux上运行,并使用gcc和-DDEBUGGING进行构建,因此.so文件也是如此。我可以重新编译。 当执行Perl程序时,如何跟踪.so文件中的C函数?我需要知道函数名称以...
我正在处理一些需要序列化Perl正则表达式的代码,包括任何正则表达式标志。只支持一部分标志,因此我需要检测正则表达式对象中是否存在不支持的标志,例如/u。 当前版本的代码实现如下:static void serialize_regex_flags(buffer *buf, SV *sv) {...
我正在编写一个XS模块。我分配一些资源(例如malloc()或SvREFCNT_inc()),然后进行涉及Perl API的操作,最后释放资源。这在普通的C语言中是没有问题的,因为C语言没有异常,但使用Perl API的代码可能会调用croak(),从而阻止正常的清理并泄漏资源。因此,除了相当...
在Perl中,存在像__PACKAGE__、__SUB__、__FILE__和__LINE__这样的特殊标记,并可从脚本中使用。 我可以从XS中获取__PACKAGE__的值,例如HvNAME(PL_currstash),但是如何访问其他的呢? 是否有专门的接口可以从XS中访问它们?比如:...
我该如何将Perl数组通过引用传递给C XS模块?my @array = ( 1..20 ); XSTEST::test_array_passing(\@array); 在XS中,我应该怎么做才能看到这个数组?
阅读perlxs文档后,我来到了OUTPUT关键字的部分: xsubpp为XSUB中OUTPUT部分的所有参数自动发出SvSETMAGIC(),除了RETVAL。这通常是期望的行为,因为它负责在输出参数上正确调用“set”魔法(对于必须创建的哈希或数组元素参数,如果它们不存在,则需要这些魔...