Bla*_*oth 1 perl function symbolic-references perl-core
我知道我可以很容易地做类似的事情
sub sin {
sin($_[0]);
}
Run Code Online (Sandbox Code Playgroud)
并象征性地引用我需要的每个函数,但我想知道是否有办法做类似的事情
{$foo}(123);
Run Code Online (Sandbox Code Playgroud)
与
&{$foo}(123);
Run Code Online (Sandbox Code Playgroud)
哪个有效,但不适用于核心功能.
谢谢.
AFAIK没有,你不能这样做.出于性能原因,CORE函数永远不会查看符号表,除非CORE::GLOBAL在编译时声明了等效函数.不幸的是,你必须编写该CORE::GLOBAL函数并使其正确模拟真实函数的调用约定.有些CORE功能不能完全重现,而大规模的黑客,print以及open例如.由于CORE::GLOBAL全局影响您的所有代码和所有库代码,您必须确保它完全正确或导致非常难以调试错误.一些模块,如autodie,必须竭尽全力包装核心功能.
但是在这里,让我告诉你枪架和弹药的位置......
my @return = eval "$function(\@args)";
Run Code Online (Sandbox Code Playgroud)
......当然,这是一个巨大的安全性和可维护性漏洞.不要这样做.
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |