http://www.perlmonks.org?node_id=366659


in reply to Perl Cascading Calls, Losing STDIN?

I'm not entirely sure I know what you're asking. I've included some test code and output below to hopefully clarify.

[johnsca@cory johnsca]# cat tst.pl #!/usr/bin/perl my $run = $ARGV[0] + 1; chomp(my $val = <STDIN>); print "Test #$run: '$val'\n"; system('./tst.pl', $run) unless $run >= 3; [johnsca@cory johnsca]# ./tst.pl foo Test #1: 'foo' bar Test #2: 'bar' baz Test #3: 'baz' [johnsca@cory johnsca]# cat tst.inp foo bar baz quux [johnsca@cory johnsca]# ./tst.pl < tst.inp Test #1: 'foo' Test #2: '' Test #3: '' [johnsca@cory johnsca]# cat tst.inp | ./tst.pl Test #1: 'foo' Test #2: '' Test #3: ''

Basically, the issue I'm seeing is that the subprocesses read from STDIN normally as long as it was not redirected or piped in any way. This seems strange, and I don't really have any idea why it would be handled any differently. I don't know if it's a perl issue, a shell issue, or an OS issue.

I get the same behavior on the following perls:

I tried it under bash on both systems, and ash on linux.

Anyway, sorry I can't really give any answers but hopefully this will prompt someone a little more knowledgeable in this area than myself to chip in.

P.S. In the future, it is best to include code samples (the minimum required to duplicate the behavior) to demonstrate exactly what your problem is.

bbfu
Black flowers blossom
Fearless on my breath