Ultimately, what I want to do is to start a process in a module and parse the output in real time in another script.
What I want to do :
- Open a process Handler (IPC)
- Use this attribute outside of the Module
How I'm trying to do it and fail :
- Open the process handler
- Save the handler in a module's attribute
- Use the attribute outside the module.
Code example :
#module.pm
$self->{PROCESS_HANDLER};
sub doSomething{
.开发者_JS百科..
open( $self->{PROCESS_HANDLER}, "run a .jar 2>&1 |" );
...
}
#perlScript.pl
my $module = new module(...);
...
$module->doSomething();
...
while( $module->{PROCESS_HANDLER} ){
...
}
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;
Your while
statement is missing a readline
iterator, for one thing:
while( < {$module->{PROCESS_HANDLER}} > ) { ...
or
while( readline($module->{PROCESS_HANDLER}) ) { ...
精彩评论