use strict; use warnings; no warnings 'once'; BEGIN { use Config; my $pseudo_fork = (($^O eq 'MSWin32' || $^O eq 'NetWare') && $Config::Config{useithreads} && $Config::Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/); if (! $pseudo_fork) { print("1..0 # SKIP Not using pseudo-forks\n"); exit(0); } } use Test::More 'tests' => 1; package Foo; { use Object::InsideOut; my @foo :Field :All(foo); } package main; my $main = $$; my $obj = Foo->new(); $obj->foo(0); open(OLDERR, ">&STDERR"); open(STDERR, ">stderr.tmp"); for (1..3) { if (my $pid = fork()) { # Parent $obj->foo($_); die if $obj->foo() != $_; my $x = Foo->new(); $x->foo($$); die if $x->foo() != $$; } else { # Child $obj->foo($_); die if $obj->foo() != $_; my $x = Foo->new(); $x->foo($$); die if $x->foo() != $$; } } if ($$ == $main) { sleep(2); open(STDERR, '>&OLDERR'); ok(-z 'stderr.tmp', "MSWin32 pseudo-forks"); if (-s 'stderr.tmp') { open(IN, 'stderr.tmp'); diag($_) foreach (); close(IN); } unlink('stderr.tmp'); } exit(0); # EOF