如果我做了一個子程序名,說perl的測試,如果象徵功能名稱存在
$type = 'Circle';
$fn = 'My'.$type.'Renderer';
如何測試是否被定義在$ FN命名的子程序?
如果我做了一個子程序名,說perl的測試,如果象徵功能名稱存在
$type = 'Circle';
$fn = 'My'.$type.'Renderer';
如何測試是否被定義在$ FN命名的子程序?
PACKAGE->can($fn)
,其中PACKAGE爲main
默認值。defined &{$fn}
can
也會如果存在的話,你代碼引用回到這個功能。
您可能會傾向於使用can
方法,但這是錯誤的,它會導致誤報,因爲它服從繼承。你想使用exists
。
my $name = ...;
my @args = ...;
die("$name doesn't exist\n") if !exists(&$name);
(\&$name)->(@args);
$name->(@args)
就足夠沒有嚴格。奇怪的語法繞過嚴格。
對於'PACKAGE-> can($ fn)'(通常是'main-> can($ fn)')+1。 'defined'測試讓我發癢 –
是的,的確,PACKAGE-> can真的是我想要的。我認爲定義&{$ fn}會起作用,但搞亂了我的簡單測試。這就像堆棧溢出一樣對編程。謝謝。 – Don