什么语法(如果有的话)能够引用一个内置的转换?
$shift_ref = $your_magic_Syntax_here;
sub test { ... } $test_ref = \&test;
我尝试过以下操作,这些都不行:
\&shift \&CORE::shift \&{'shift'} \&{'CORE::shift'}
你的答案可以包括XS,如果需要,但我不喜欢.
澄清:我正在寻找一个通用解决方案,可以从任何内置函数获取功能完整的代码参考.然后,该代码可以传递给任何更高阶的函数,就像对用户定义的子代的引用一样.到目前为止,这是不可能的共识,任何人都不同意?
解决方法
不,你不行你要解决的根本问题是什么?可能有一些办法可以做到这一点.
再加上这个问题的一部分“你的答案可以包括XS,但我不喜欢”.
从XS调用内置函数是非常困难的,因为内置函数被设置为假定它们作为编译的optree的一部分运行,并且设置了一些全局变量.通常,调用内置函数本身所使用的一些基础函数要容易得多,虽然并不总是有这样的功能,
buffer = sv_2mortal(newSVpvf("(caller(%d))[3]",(int) frame)); caller = eval_pv(SvPV_nolen(buffer),1);
(从XS做一个字符串eval,而不是通过直接调用pp_caller所需的环).