7 skip_all_without_dynamic_extension("Devel::Peek");
12 use File::Temp qw(tempdir);
15 my %hash = map +($_ => 1), ("a".."z");
17 my $tmp_dir = tempdir(CLEANUP => 1);
18 my $tmp_file = File::Spec->catfile($tmp_dir, 'dump');
22 open(OLDERR, ">&STDERR") || die "Can't dup STDERR: $!";
23 open(STDERR, ">", $tmp_file) ||
24 die "Could not open '$tmp_file' for write: $^E";
26 open(STDERR, ">&OLDERR") || die "Can't dup OLDERR: $!";
27 open(my $fh, "<", $tmp_file) ||
28 die "Could not open '$tmp_file' for read: $^E";
31 my ($riter) = $dump =~ /^\s*RITER\s*=\s*(\d+)/m or
32 die "No plain RITER in dump '$dump'";
37 while (my $key = each %hash) {
38 push @{$riters[riter()]}, $key;
41 my ($first_key, $second_key);
43 for my $chain (@riters) {
44 if ($chain && @$chain >= 2) {
45 $first_key = $chain->[0];
46 $second_key = $chain->[1];
52 skip_all "No 2 element chains; need a different initial HASH";
57 # Ok all preparation is done
59 Found keys '$first_key' and '$second_key' on chain $riter
60 Will now iterato to key '$first_key' then delete '$first_key' and '$second_key'.
63 1 until $first_key eq each %hash;
64 delete $hash{$first_key};
65 delete $hash{$second_key};
67 note "Now iterating into freed memory\n";