2016-02-11 50 views
0

我在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」消息。任何人都有如何正確設置它的例子?

感謝您的幫助。

+1

顯示你的代碼實際上正在加載FlowStep_RunTiming – ysth

+0

@ysth我剛剛添加了上面的代碼來加載和運行FlowStep_RunTiming –

回答

1

變化eval "require $module";

unless (eval "require $module") { 
    die "Error in $module: [email protected]"; 
} 

或做任何你想要別的時,有一個錯字。

請參閱perldoc perlvarperldoc -f eval

+0

這隻會導致perl死亡。如何在死前打印錯字和行號? –

+0

這是存儲在$ @由eval – ysth

+0

感謝您的解決方案和解釋...它的工作!我感謝幫助! –

0

在孩子,我這樣做;服務是父的perl

use Service; 
our @ISA= qw(Service); 
sub new 
{ 
    my ($class, $args) = @_; 
    my $self = $class->SUPER::new($args); 
    bless $self, $class; 
    return $self; 
} 

sub prerun{    #something calling run 
    my ($self) = @_; 
    $self->run();  #self becomes the first argument to run 
} 

和需要將類/對象傳遞到每個功能

在父

;

sub run 
{ 
    my ($self) = @_; 
} 

然後從孩子

相關問題