3

如果我编一个子程序名称,说

$type = 'Circle';
$fn = 'My'.$type.'Renderer';

如何测试 $fn 中命名的子例程是否已定义?

4

2 回答 2

5

您可能很想使用该can方法,但这是错误的,它可能导致误报,因为它遵循继承。你想用exists.

my $name = ...;
my @args = ...;
die("$name doesn't exist\n") if !exists(&$name);
(\&$name)->(@args);

$name->(@args)没有严格就足够了。奇怪的语法绕过严格。

于 2012-06-08T19:40:05.573 回答
4
  1. PACKAGE->can($fn), 默认为 PACKAGE main
  2. defined &{$fn}

can如果它存在,还将返回您对此函数的 CODE 引用。

于 2012-06-08T18:43:01.153 回答