我有一个perl对象(祝福哈希的引用)。
sub funcname {
#some code
}
my $o = My::Class->new();
$o->{internal_data} = \&funcname; #I know it is not nice
在XS代码的某个地方,我有$ o引用,我需要获得$o->{internal_data}
的值。
/* at some point in XS code */
SV *obj = ... /* $o value passed to a XS function */
SV *func;
...
/* here I do not know how to load $o->{internal_data} value into func */
...
call_sv(func,G_SCALAR);
perl中可能还有一些章节(api | xstut | guts | ???)。我只是无法找到它。
提前感谢任何提示。
- KMX
答案 0 :(得分:5)
SvRV
会从参考中获取哈希值(SV*
),MUTABLE_HV
会将其转换为HV*
,hv_fetch
/ { {1}}将从哈希中获取。
hv_fetchs
答案 1 :(得分:1)
如果您使用的是“标准”对象,那么它只是一个哈希值,因此您可以使用HV方法。参见例如http://perldoc.perl.org/perlguts.html#Working-with-HVs(实际上,整个perlguts页面对此很好读......)
您对该对象的SV *是一个引用,因此您可以使用SvRV“取消引用”它,将其转换为HV以传递给hv_xxx函数(例如hv_fetch)。
祝你好运!