perl test如果存在符号函数名称

时间:2012-06-08 18:38:58

标签: perl

如果我编写子程序名称,请说

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

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

2 个答案:

答案 0 :(得分:5)

您可能想要使用can方法,但这是错误的,它可能导致误报,因为它服从继承。您想使用exists

my $name = ...;
my @args = ...;
die("$name doesn't exist\n") if !exists(&$name);
(\&$name)->(@args);
没有严格的话,

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

答案 1 :(得分:4)

  1. PACKAGE->can($fn),PACKAGE默认为main
  2. defined &{$fn}
  3. can也会返回对此函数的CODE引用(如果存在)。