开发者

Perl - How to use a process Handle created in a Module in another Perl Script

开发者 https://www.devze.com 2023-01-02 20:15 出处:网络
Ultimately, what I want to do is to start a process in a module and parse the output in real time in another script.

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}) ) { ...
0

精彩评论

暂无评论...
验证码 换一张
取 消