我在perl中使用strict時遇到問題。我有一個名爲FlowStep的父類,我有一個子類FlowStep_ *,我想從FlowStep繼承。當我運行時,FlowStep立即由perl加載。根據用戶希望運行的流程步驟,有代碼可以動態加載該步驟的特定軟件包。例如,如果用戶運行「myFlowManager -step foo」,則生成的流程管理器代碼將運行,爲步驟foo確定程序包並加載它。使用strict時,perl找不到子類方法
所以基本上一些代碼,說是這樣的:
sub runPerlModule {
my $this = shift;
my $PMfullPath = $$this{"subPM"} ;
my $path = dirname($PMfullPath);
my $module = basename($PMfullPath, ".pm");
# dynamically load the module
push(@INC, $path);
eval "require $module";
# create a new object
my $obj = $module->new();
# call the child class's init code
$obj->init();
$obj->run();
}
一個例子流程步驟稱爲FlowStep_RunTiming。在FlowStep_RunTiming,我有以下幾點:
use FlowStep;
use strict;
package FlowStep_RunTiming;
use base qw(FlowStep); #i think this is the only command needed to setup inheritance
sub new {
# some code to create
}
sub run {
# some code to run
}
1;
我在FlowStep_RunTiming採用嚴格的時候有一個問題
。如果FlowStep_RunTiming中沒有語法錯誤,則沒有問題。但是,如果FlowStep_RunTiming存在拼寫錯誤,那麼當我運行該程序時,perl只會抱怨沒有爲FlowStep_RunTiming定義run()方法。
包FlowStep_RunTiming是動態選擇的,所以執行之前開始perl可以lint它。對於perl來說,必須有一種方法來報告真正的問題,即在FlowStep_RunTiming中報告語法錯誤和行號以及錯誤。現在必須運行,失敗,並通過眼睛找到語法錯誤。
我沒有正確設置子類嗎?有沒有辦法讓perl報告真正的語法錯誤,而不是給出沒有定義run()的「false」消息。任何人都有如何正確設置它的例子?
感謝您的幫助。
顯示你的代碼實際上正在加載FlowStep_RunTiming – ysth
@ysth我剛剛添加了上面的代碼來加載和運行FlowStep_RunTiming –