我如何参考"罪"?

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,但它在哪个模块?我没有看到任何记录.

sim*_*que 9

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)