我有一个名为 Question 的类,以及一堆取决于问题类型的子类。我可以针对子类创建对象,但我不应该能够创建类Question本身的对象:
#! /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"?)
有什么办法可以捕捉到这个特定的错误,所以我可以自己处理吗?我知道我可以创建一个有效类型的数组,但我希望能够以某种方式添加新的问题类型,而不必记住更新我的数组。