问题
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{
...
open( $self->{PROCESS_HANDLER}, "run a .jar 2>&1 |" );
...
}
#perlScript.pl
my $module = new module(...);
...
$module->doSomething();
...
while( $module->{PROCESS_HANDLER} ){
...
}
回答1:
Your while
statement is missing a readline
iterator, for one thing:
while( < {$module->{PROCESS_HANDLER}} > ) { ...
or
while( readline($module->{PROCESS_HANDLER}) ) { ...
回答2:
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;
来源:https://stackoverflow.com/questions/3015584/perl-how-to-use-a-process-handle-created-in-a-module-in-another-perl-script