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!

In reply to Hash Pipe Problem by NateTut

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.