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)厳密にせずに十分でしょう。奇妙な構文はstrictをバイパスします。

于 2012-06-08T19:40:05.573 に答える
4
  1. PACKAGE->can($fn)、デフォルトはPACKAGEmainです。
  2. defined &{$fn}

canまた、この関数が存在する場合は、この関数へのCODE参照を返します。

于 2012-06-08T18:43:01.153 に答える