regex - 如何从 C 在 Perl 5.12 中创建 qr//?

标签 regex perl xs qr-operator

这在 5.8 和 5.10 中对我有用,但在 5.12 中我的代码创建了这个奇怪的非 qr 对象:

# running "print Dumper($regex)"
$VAR1 = bless( do{\(my $o = '')}, 'Regexp' );

而打印不是由我的代码创建的 qr//看起来像这样:
# running "print Dumper(qr/foo/i)"
$VAR1 = qr/(?i-xsm:foo)/;

我的代码基本上是:
REGEXP *rx = re_compile(pattern, flags);
SV *regex = sv_2mortal(newSVpv("",0));

sv_magic(regex, (SV*)rx, PERL_MAGIC_qr, 0, 0);

stash = gv_stashpv("Regexp", 0);
sv_bless(newRV((SV*)regex), stash);

有人知道如何从 5.12 中的字符串正确创建正则表达式吗?

最佳答案

谢谢你们让我走上正轨,伙计们,事实证明我真的想多了。他们只是剪掉了魔法线,不创造PV。

这就是你在 Perl 5.12 中需要做的所有事情:

REGEXP *rx = re_compile(pattern, flags);
SV *regex = newRV((SV*)rx);

stash = gv_stashpv("Regexp", 0);
sv_bless(regex, stash);

关于regex - 如何从 C 在 Perl 5.12 中创建 qr//?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2685477/

相关文章:

javascript - 当我在正则表达式中包含数组引用时测试失败(正则表达式中带有索引的数组)JavaScript

java - 用java编写正则表达式。使用 string.split() 方法。我希望它在第一次出现 '(' 后停止 split

perl - 将数组存储在哈希中

用于从文件中替换换行符的 ruby​​ 等效 perl 命令?

perl - 如何告诉 MakeMaker 在子目录中构建 XS 文件?

perl - 为什么 XS 潜艇使用 const char *?

javascript - Jquery - 检查链接表达式问题中的 href?

java - 将正则表达式从 Java 传输到 PostgreSQL

perl - 引用 Perl 运算符

调用带参数的 perl 例程