in reply to Re^2: STDOUT missing on Windows, works on Unix
in thread STDOUT missing on Windows, works on Unix

Actually, I do use windows and do know a little about what's going on.

The difference is that on *nix, you're creating a process tree like this:

yourshell perl bugSTDOUT.pl perl bugSTDOUTb.pl perl bugSTDOUTc.pl

Under windows it looks like this:

cmd.exe perl bugSTDOUT.pl * cmd.exe * perl bugSTDOUTb.pl * cmd.exe perl bugSTDOUTc.pl

I could go on to mention the pipe instance that is shared between the three marked processes; and the need to explicitly set a flag on a CreateProcess call to cause spawned process to inherit handles from its parent, but you likely wouldn't be interested.

If you more exactly emulate the *nix handling of the situation, by suppressing the creation of those intermediary shell processes with their associated virtual consoles, thus:

C:\test>type bug* bugSTDOUT.pl #!/usr/bin/perl print STDOUT "Running bugSTDOUTb.pl with backticks\n"; print STDOUT "stdout from bugSTDOUTb.pl=" . `$^X bugSTDOUTb.pl` . "\n" +; bugSTDOUTb.pl #!/usr/bin/perl print STDOUT "Running bugSTDOUTc.pl with system()\n"; system( $^X, 'bugSTDOUTc.pl' ); print STDOUT "$0 done\n"; bugSTDOUTc.pl #!/usr/bin/perl print STDOUT "Hello world!\n";

You get the behaviour you are seeking:

C:\test>bugSTDOUT.pl Running bugSTDOUTb.pl with backticks stdout from bugSTDOUTb.pl=Running bugSTDOUTc.pl with system() Hello world! bugSTDOUTb.pl done

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^4: STDOUT missing on Windows, works on Unix (Solution)
by abecher (Novice) on Dec 13, 2008 at 19:33 UTC
    I'd like to understand better what you're saying then. I probably won't get to play with this more until after the weekend, but I did have a question about the '+' in your bugSTDOUT.pl. That's a syntax error for me. I would have thought it was probably a typo but you took the extra time to make it red so I doubt it. With the line-wrap I thought maybe I was missing something. Can you comment on what the '+' before the semicolon is for and if its something more than:
    ... "/n" +;
      Notice the "+" is red. It's added by the autowrapping done by PerlMonks. Click on "download" to get the code as posted.