1#!perl 2 3use strict ("subs", "vars", "refs"); 4use warnings ("all"); 5BEGIN { $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} = "Storable"; } 6END { delete $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} } # for VMS 7 8use Scalar::Util qw(refaddr); 9use Test::More; 10 11BEGIN 12{ 13 $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} and eval "use $ENV{CLONE_CHOOSE_PREFERRED_BACKEND}; 1;"; 14 $@ and plan skip_all => "No $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} found."; 15} 16 17use Clone::Choose; 18 19my $array = [1, ["two", [3, ["four"],],],]; 20my $cloned_array = clone $array; 21 22ok(refaddr $array != refaddr $cloned_array, "Clone depth 0"); 23ok(refaddr($array->[1]) != refaddr($cloned_array->[1]), "Clone depth 1"); 24ok(refaddr($array->[1][1]) != refaddr($cloned_array->[1][1]), "Clone depth 2"); 25ok(refaddr($array->[1][1][1]) != refaddr($cloned_array->[1][1][1]), "Clone depth 3"); 26 27ok($array->[0] == $cloned_array->[0], "Array value depth 0"); 28ok($array->[1][0] eq $cloned_array->[1][0], "Array value depth 1"); 29ok($array->[1][1][0] == $cloned_array->[1][1][0], "Array value depth 2"); 30ok($array->[1][1][1][0] eq $cloned_array->[1][1][1][0], "Array value depth 3"); 31 32ok($cloned_array->[0] == 1, "Array value sanity depth 0"); 33ok($cloned_array->[1][0] eq "two", "Array value sanity depth 1"); 34ok($cloned_array->[1][1][0] == 3, "Array value sanity depth 2"); 35ok($cloned_array->[1][1][1][0] eq "four", "Array value sanity depth 3"); 36 37my $empty_array = []; 38my $cloned_empty_array = clone $empty_array; 39 40ok(refaddr $empty_array != refaddr $cloned_empty_array, "Empty array clone"); 41 42done_testing; 43 44 45