BEGIN { $^W = 1; $| = 1; $SIG{INT} = sub { die }; print "1..8\n"; } use strict; use Carp; use IPC::Shareable; my $t = 1; my $ok = 1; my $sv; # --- Scalar refs tie($sv, 'IPC::Shareable', { destroy => 'yes' }) or croak "Could not tie scalar"; my $ref = 'ref'; $sv = \$ref; $$sv eq 'ref' or undef $ok; print $ok ? "ok $t\n" : "not ok $t\n"; # --- Array refs ++$t; $ok = 1; $sv = [ 0 .. 9 ]; for (0 .. 9) { ($sv->[$_] eq $_) or undef $ok; } print $ok ? "ok $t\n" : "not ok $t\n"; # --- Hash refs my %check; ++$t; $ok = 1; my @k = map { ('a' .. 'z')[int(rand(26))] } (0 .. 9); my @v = map { ('A' .. 'Z')[int(rand(26))] } (0 .. 9); @check{@k} = @v; $sv = { %check }; while (my($k, $v) = each %check){ $sv->{$k} eq $v or undef $ok; } print $ok ? "ok $t\n" : "not ok $t\n"; # --- Multiple refs my @av; tie @av => 'IPC::Shareable'; $av[0] = { foo => 'bar', baz => 'bash' }; $av[1] = [ 0 .. 9 ]; ++$t; $ok = ($av[0]->{foo} eq 'bar'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = ($av[0]->{baz} eq 'bash'); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = 1; for (0 .. 9) { $av[1]->[$_] == $_ or undef $ok; } print $ok ? "ok $t\n" : "not ok $t\n"; my %hv; tie %hv => 'IPC::Shareable'; for ('a' .. 'z') { $hv{lower}->{$_} = $_; $hv{upper}->{$_} = uc; } ++$t; $ok = 1; for ('a' .. 'z') { $hv{lower}->{$_} eq $_ or undef $ok; $hv{upper}->{$_} eq uc or undef $ok; } print $ok ? "ok $t\n" : "not ok $t\n"; IPC::Shareable->clean_up_all; tie($sv, 'IPC::Shareable', { destroy => 'yes' }) or croak "Could not tie scalar"; # --- Deeply nested thingies ++$t; $sv->{this}->{is}->{nested}->{deeply}->[0]->[1]->[2] = 'found'; $ok = ($sv->{this}->{is}->{nested}->{deeply}->[0]->[1]->[2] eq 'found'); print $ok ? "ok $t\n" : "not ok $t\n"; IPC::Shareable->clean_up_all; # --- Done! exit;