2010-06-10 15 views
0

最終,我想要做的是在模塊中啓動進程並在另一個腳本中實時解析輸出。Perl - 如何使用在另一個Perl腳本中的模塊中創建的句柄

我想要做什麼:

  • 打開進程處理程序(IPC)
  • 使用 模塊之外這個屬性

如何我試圖做到這一點,失敗:

  • 打開進程處理程序
  • 將處理程序保存在模塊的 屬性中
  • 使用模塊外部的屬性。

代碼示例:

#module.pm 

$self->{PROCESS_HANDLER}; 

sub doSomething{ 
    ... 
    open($self->{PROCESS_HANDLER}, "run a .jar 2>&1 |"); 
    ... 
} 


#perlScript.pl 

my $module = new module(...); 
... 
$module->doSomething(); 
... 
while($module->{PROCESS_HANDLER}){ 
    ... 
} 
+0

什麼'自我 - > {PROCESS_HANDLER}'平均(不帶前導'$')? – mob 2010-06-10 15:47:46

+0

我的錯誤,我已經更新了。 – Zwik 2010-06-10 16:58:58

回答

2

while聲明缺少readline迭代器,一兩件事:

while(< {$module->{PROCESS_HANDLER}} >) { ... 

while(readline($module->{PROCESS_HANDLER})) { ... 
+0

< {$module-> {PROCESS_HANDLER}}>沒有工作,但是readline($ module - > {PROCESS_HANDLER})做到了。非常感謝你。 – Zwik 2010-06-10 17:20:49

+0

my $ handle = $ module - > {PROCESS_HANDLER};而(<$handle>)...會工作。 – runrig 2010-06-10 20:56:39

3

package Thing; 
use Moose; 
use IO::Pipe; 

has 'foo' => (
    is  => 'ro', 
    isa  => 'IO::Handle', 
    default => sub { 
     my $handle = IO::Pipe->new; 
     $handle->reader('run a .jar 2>&1'); # note, *no* pipe character here 
     return $handle; 
    }); 

1; 

package main; 
use Thing; 
my $t = Thing->new; 
say $t->foo->getlines; 
+0

getlines將返回什麼?我的意思是,自從我上次調用該方法以來它會返回輸出嗎? – Zwik 2010-06-10 15:46:47

+0

[是](http://p3rl.org/IO::Handle#%24io-%3Egetlines)。 – daxim 2010-06-10 15:56:45

+0

謝謝你的回答,但由於我沒有使用穆斯,這不是我正在尋找的。 – Zwik 2010-06-10 17:20:16

相關問題