【问题标题】:How do I take a reference to `sin`?我如何引用`sin`?
【发布时间】:2015-09-22 09:02:58
【问题描述】:

我可以定义一个子程序并像这样引用它

sub F { q(F here) }
$f = \&F;
print &$f           # prints “F here”

但是我怎样才能做到这一点,例如,sin

$f = \&sin;
print &$f           # error: Undefined subroutine &main::sin called

听起来我应该可以使用\&MODULE::sin; 显然cos 不在main 中,但它在哪个模块中?我在任何地方都没有看到记录。

【问题讨论】:

  • 您应该尽可能避免使用与符号&。在引用子例程时需要使用它,例如 my $f = \&F,但您应该使用 $f->() 调用该引用

标签: perl reference subroutine


【解决方案1】:

sin 不在您当前的包中。您需要从the CORE:: namespace 调用它。 CORE:: 是所有内置函数所在的位置。它是自动导入的。

my $f= \&CORE::sin;
print $f->(1);

输出:

0.841470984807897

如果您想在函数被覆盖后调用原始内置函数,了解CORE::foo 非常有用。

use Time::HiRes 'time';

say time;
say CORE::time;

这个输出:

1442913293.20158
1442913293

【讨论】:

  • 你知道,我试过 coreCore,但不是 CORE。我想我在某个时候知道这一点:-)。
  • @xebtl 我也是。但后来我想起来了。请注意,还有CORE::global:: 可以覆盖内容。
猜你喜欢
  • 2010-11-24
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多