sachinb has asked for the wisdom of the Perl Monks concerning the following question:

I have main Perl program which calls 2 different perl programs. I am trying to return value from one perl program and use it in another program by passing arguments? I tried different options but could not get it working? If any one knows how to do this?
  • Comment on How to get value from one Perl program to another?

Replies are listed 'Best First'.
Re: How to get value from one Perl program to another?
by Abigail-II (Bishop) on May 28, 2002 at 17:03 UTC
    That's not very hard. The fact your other two programs are Perl programs is irrelevant. Let's call them program1 and program2.

    We need to do two things. First call the first program, and collect its exit value, then use the exit value as a parameter to the second program. To call an external program and collect the exit value, we use the system function. Note what perldoc -f system has to say:

     
        The return value is the exit status of the program as returned by
        the "wait" call.  To get the actual exit value divide by 256.
        ...
        Return value of -1 indicates a failure to start the program (inspect
        $! for the reason)
    
    So, start off with this code fragment:
    my $exit1 = system "program1"; if ($exit1 == -1) { die "Failed to call 'program1': $!\n"; } $exit1 >>= 8; # Get the real-exit value. The bits we # are shifting off are any possible signals.

    And now we can call the second program. Any additional arguments to system will be arguments to the called program. We get:

    my $exit2 = system "program2", $exit1; if ($exit2 == -1) { die "Failed to call 'program2': $!\n"; }

    Abigail

Re: How to get value from one Perl program to another?
by termix (Beadle) on May 28, 2002 at 18:05 UTC

    So there are three programs. The first program (let's call this one "master") starts one of the other programs (let's call this one child1) and then gets some values back. These values are then given to the last program (let's call this child2) which does more stuff with them.

    If I understand your statement correctly, you want to take the get data from child1 and make it command line parameters for child2. If so you need to check out the 'back-tick' operator (the quote-like thing on the tilda key). Passing stuff as parameter to child2 is easy by either the system command or by opening a pipe.

    This is extensively covered in PERL documentation. Look at man perlfunc for the "system" command. Look at man perlop for the "backtick" operator. and look at man perlipc for even niftier ways of making programs talk to each other (with examples even). There is even a man perlopentut which is structured as a tutorial for the "open" command (the part that would help you is called "pipes").

    -- termix

Re: How to get value from one Perl program to another?
by penguinfuz (Pilgrim) on May 28, 2002 at 20:17 UTC