我有一個叫做Question的類,還有一些子類,這取決於問題的類型。我可以創建針對子類的對象,但我不應該能夠創建類的對象問題本身:Perl:測試是否存在類
#! /usr/bin/env perl
use strict;
use warnings;
#
# LOAD IN YOUR QUESTIONS HERE
#
my @list_of_questions;
for my $question_type qw(Science Math English Dumb) {
my $class = "Question::$question_type";
my $question = $class->new;
push @list_of_questions, $question;
}
package Question;
use Carp;
sub new {
my $class = shift;
my $self = {};
if ($class = eq "Question") {
carp qq(Need to make object a sub-class of "Question");
return;
}
bless $self, $class;
return $self;
}
yadda, yadda, yadda...
package Question::Math;
use parent qw(Question);
yadda, yadda, yadda...
package Question::Science;
use parent qw(Question);
yadda, yadda, yadda...
package Question::English;
use parent qw(Question);
yadda, yadda, yadda...
注意這些都不模塊,而僅僅是我定義的類是用在我的程序中。因此,我無法在運行時測試模塊加載。
當我運行上面,我得到:
Can't locate object method "new" via package "Question::Dumb" (perhaps you forgot to load "Question::Dumb"?)
有沒有辦法趕上這個特定的錯誤,所以我能應付自己嗎?我知道我可以創建一個有效類型的數組,但我希望能夠添加新的問題類型,而不必記住更新我的數組。
[this]的可能的重複(http://stackoverflow.com/questions/251694/how-can-i-check-if-i-have-a -perl模塊 - 使用 - 前 - )? – David
使用'eval {$ class_type-> new}'有什麼問題? – mob
不重複:這是在編譯時檢測我是否有特定的模塊。我不知道有人在運行時間之前詢問無效問題。爲了說清楚,這些不是我正在加載的_modules_,而是我在程序本身定義的普通類。 –