如果我编一个子程序名称,说
$type = 'Circle';
$fn = 'My'.$type.'Renderer';
如何测试 $fn 中命名的子例程是否已定义?
您可能很想使用该can
方法,但这是错误的,它可能导致误报,因为它遵循继承。你想用exists
.
my $name = ...;
my @args = ...;
die("$name doesn't exist\n") if !exists(&$name);
(\&$name)->(@args);
$name->(@args)
没有严格就足够了。奇怪的语法绕过严格。
PACKAGE->can($fn)
, 默认为 PACKAGE main
。defined &{$fn}
can
如果它存在,还将返回您对此函数的 CODE 引用。