I have reduced my problem to the following:
I have two scripts, A.ksh & B.ksh. Each is identical and they look like:
#!/usr/bin/ksh
Count=0
Limit=30
while [ $Count -lt $Limit ] ;
do
Count=$(($Count + 1))
sleep 1
echo $0 has Slept for \[$Count\] Seconds so Far...
done
My goal is to write a Perl script that executes them in parallel and prints their output. This is what I have:
#!/usr/bin/perl
use strict;
use warnings;
my @Types = ('A', 'B');
my %ScriptName;
my %IsFinished;
my %ProcesseHandle;
foreach my $Type (@Types)
{
$ScriptName{$Type} = $Type . '.ksh';
$IsFinished{$Type} = 0;
if(!open($ProcesseHandle{$Type}, "$ScriptName{$Type}|"))
{
WarnLog("Unable to run Script:[$ScriptName{$Type}]:\n$^E:\n$!:\n
+Error Number $?:$@ ");
}
}
while(!$IsFinished{'A'} or !$IsFinished{'B'})
{
my %Line;
foreach my $Type (@Types)
{
if(!$IsFinished{$Type})
{
$Line{$Type} = <$ProcesseHandle{$Type}>;
if(!defined($Line{$Type}))
{
$IsFinished{$Type} = 1;
}
print("\[$Type\]\[$Line{$Type}\]\n");
}
}
}
And this is what I get:
[A][GLOB(0x2ae38)]
Use of uninitialized value in concatenation (.) or string at HashPipe.
+pl line 33.
[B][]
[A][GLOB(0x2ae38)]
Use of uninitialized value in concatenation (.) or string at HashPipe.
+pl line 33.
[A][]
And of course it hangs there. Obviously
$Line{$Type} = <$ProcesseHandle{$Type}>; isn't doing what I expect. Why?
Also is there a better way to do
while(!$IsFinished{'A'} or !$IsFinished{'B'}) so I don't have to hardcode the keys?
Thanks!
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.