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
In reply to Re^3: STDOUT missing on Windows, works on Unix (Solution)
by BrowserUk
in thread STDOUT missing on Windows, works on Unix
by abecher
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |