什么语法,如果有的话,能够引用内置的像shift?
$shift_ref = $your_magic_syntax_here;
Run Code Online (Sandbox Code Playgroud)
您可以使用与用户定义的子相同的方式:
sub test { ... }
$test_ref = \&test;
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,但都不起作用:
\&shift
\&CORE::shift
\&{'shift'}
\&{'CORE::shift'}
Run Code Online (Sandbox Code Playgroud)
如果需要,你的答案可以包括XS,但我不愿意.
澄清:我正在寻找一种通用解决方案,可以从任何内置程序获得功能齐全的代码参考.然后可以将此coderef传递给任何更高阶的函数,就像对用户定义的子的引用一样.到目前为止似乎是共识,这是不可能的,任何人都不同意?
不,你不能。您试图解决的根本问题是什么?可能有某种方法可以做到这一点。
关于问题的附加部分“如果需要,您的答案可以包括 XS,但我不希望这样做。”,从 XS 调用内置函数确实很困难,因为内置函数被设置为假设它们作为已编译的 optree 的一部分运行并设置一些全局变量。通常,调用内置函数本身使用的一些底层函数要容易得多,尽管并不总是有这样的函数,所以你会看到类似的东西:
buffer = sv_2mortal(newSVpvf("(caller(%d))[3]", (int) frame));
caller = eval_pv(SvPV_nolen(buffer), 1);
Run Code Online (Sandbox Code Playgroud)
(从 XS 执行字符串评估,而不是经历直接调用 pp_caller 所需的麻烦)。