xeb*_*btl 5 perl reference subroutine
我可以定义一个子程序并像这样引用它
sub F { q(F here) }
$f = \&F;
print &$f # prints “F here”
Run Code Online (Sandbox Code Playgroud)
但是我怎么能这样做,例如sin?
$f = \&sin;
print &$f # error: Undefined subroutine &main::sin called
Run Code Online (Sandbox Code Playgroud)
听起来好像我应该可以使用\&MODULE::sin; 明显地cos不在main,但它在哪个模块?我没有看到任何记录.
sin不在你当前的包中.你需要从调用它的CORE::命名空间.CORE::是所有内置函数所在的位置.它会自动导入.
my $f= \&CORE::sin;
print $f->(1);
Run Code Online (Sandbox Code Playgroud)
输出:
0.841470984807897
Run Code Online (Sandbox Code Playgroud)
CORE::foo如果你想在覆盖一个函数后调用原来的内置函数,那么了解它是非常有用的.
use Time::HiRes 'time';
say time;
say CORE::time;
Run Code Online (Sandbox Code Playgroud)
这输出:
1442913293.20158
1442913293
Run Code Online (Sandbox Code Playgroud)