サブルーチン名を作成する場合、次のように言います
$type = 'Circle';
$fn = 'My'.$type.'Renderer';
$ fnで指定されたサブルーチンが定義されているかどうかをテストするにはどうすればよいですか?
サブルーチン名を作成する場合、次のように言います
$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)
厳密にせずに十分でしょう。奇妙な構文はstrictをバイパスします。
PACKAGE->can($fn)
、デフォルトはPACKAGEmain
です。defined &{$fn}
can
また、この関数が存在する場合は、この関数へのCODE参照を返します。