从XS访问存储在perl对象(祝福散列)中的值

时间:2011-04-06 20:57:43

标签: perl xs

我有一个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

2 个答案:

答案 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)。

祝你好运!