BEGIN { $^W = 1; $| = 1; $SIG{INT} = sub { die }; print "1..11\n"; } use strict; use Carp; use IPC::Shareable; my $t = 1; my $ok = 1; my $awake = 0; local $SIG{ALRM} = sub { $awake = 1 }; my($av, $hv); my $pid = fork; defined $pid or die "Cannot fork : $!"; if ($pid == 0) { # --- Child sleep unless $awake; tie($hv, 'IPC::Shareable', 'hash', { destroy => 0 }) or undef $ok; tie($av, 'IPC::Shareable', 'arry', { destroy => 0 }) or undef $ok; print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($hv eq 'baz'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($av eq 'bong'); print $ok ? "ok $t\n" : "not ok $t\n"; $hv = { }; $av = [ ]; $hv->{blip}->{blarp} = 'blurp'; $hv->{flip}->{flop} = 'flurp'; $av->[1]->[2] = 'beep'; $av->[2]->[3] = 'bang'; ++$t; $ok = ($hv->{blip}->{blarp} eq 'blurp'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($hv->{flip}->{flop} eq 'flurp'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($av->[1]->[2] eq 'beep'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($av->[2]->[3] eq 'bang'); print $ok ? "ok $t\n" : "not ok $t\n"; exit; } else { # --- Parent tie($hv, 'IPC::Shareable', 'hash', { create => 'yes', destroy => 'yes' }) or undef $ok; tie($av, 'IPC::Shareable', 'arry', { create => 'yes', destroy => 'yes' }) or undef $ok; $hv = 'baz'; $av = 'bong'; kill ALRM => $pid; waitpid($pid, 0); $t += 7; # - Child performed 7 tests $ok = ($hv->{blip}->{blarp} eq 'blurp'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($hv->{flip}->{flop} eq 'flurp'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($av->[1]->[2] eq 'beep'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($av->[2]->[3] eq 'bang'); print $ok ? "ok $t\n" : "not ok $t\n"; IPC::Shareable->clean_up_all; } # --- Done! exit;