One solution is to make your script multi-threaded, and use shared variables. I created this example for you, but you have to spend time to make this fit into your application, and my example is only a demo of the idea. Multi-thread is definitely no free lunch, and it requires time and experience.
(As you may realize that there is chance for my demo code to lose some input, as you might get another input, before the parent process finish with the prev one. In my code, I just throw the prev one away. You may want to use a buffer, and only throw input away when the buffer is full.)
use threads;
use threads::shared;
$| ++;
my $line = "";
share($line);
sub read_stdin {
while (<STDIN>) {
lock($line);
$line = $_;
print "child read in: $_\n";
}
}
threads->create(\&read_stdin);
while (1) {
if ($line ne "") {
lock($line);
print "parent process $line\n";
$line = "";
} else {
print "do something else\n";
sleep(1);#this nothing but to slow down the prints
}
}
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.