質問というクラスがあり、質問の種類に応じてサブクラスがたくさんあります。サブクラスに対してオブジェクトを作成することはできますが、クラス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"?)
この特定のエラーをキャッチする方法はありますか?それで私はそれを自分で処理できますか?有効な型の配列を作成できることはわかっていますが、配列を更新することを忘れずに、新しい質問型を追加できることを何らかの方法で望んでいました。