Run3 apparently doesn't do concurrency. IPC:Run can be made to do what you want. This works:
#!/usr/bin/perl # timestamp.pl while(time - $^T<10){ select undef,undef,undef, 0.1; if ( rand()<0.5) { print STDERR time(), " warn\n"; } else { print time(), " info\n"; } } print "end\n"; __END__ use IPC::Run qw ( start pump finish timeout ); my $in; my $out; my @cmd = qw( perl timestamp.pl); ## Build the harness, open all pipes, and launch the subprocesses my $h = start \@cmd, \$in, \$out, \$out ; $in = "" ; ## Now do I/O. start() does no I/O. pump $h while length $in ; ## Wait for all input to go ## Now do some more I/O. while (1){ pump $h until $out =~ s/(.+)\n$//gm ; last if ("end" eq $1); print time, " : $1\n"; } ## Clean up finish $h or die "cat returned $?" ; __END__ 1215226647 : 1215226647 info 1215226647 : 1215226647 info 1215226647 : 1215226647 warn 1215226647 : 1215226647 info 1215226647 : 1215226647 warn 1215226647 : 1215226647 warn 1215226647 : 1215226647 info 1215226647 : 1215226647 info 1215226647 : 1215226647 info 1215226648 : 1215226648 warn
In reply to Re^3: Best practice ipc and Log::Log4perl
by starbolin
in thread Best practice ipc and Log::Log4perl
by codeacrobat
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |