+ - More robust handling of the tied %^H in pure perl mode (RT#73402)
- Limit the debugger workarounds to perls between 5.8.8 and 5.14,
extend debugger support to all perl versions (FC) (RT#69862)
- If possible, automatically install (but not load) the debugger
push @$stack, namespace::clean::_ScopeGuard->arm(shift);
}
else {
+ my %old_contents = %^H;
+ %^H = ();
tie( %^H, 'namespace::clean::_TieHintHash', namespace::clean::_ScopeGuard->arm(shift) );
+ $^H{$_} = $old_contents{$_} for keys %old_contents;
}
}
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More 0.88;
+
+{
+ package Bar;
+ use sort 'stable';
+ use namespace::clean;
+ use sort 'stable';
+ {
+ 1;
+ }
+
+ Test::More::pass('no segfault');
+}
+
+{
+ package Foo;
+ BEGIN {
+ $^H{'foo'} = 'bar';
+ }
+
+ use namespace::clean;
+
+ BEGIN {
+ Test::More::is( $^H{'foo'}, 'bar', 'hinthash intact' );
+ }
+
+ {
+ 1;
+ }
+
+ BEGIN {
+ SKIP: {
+ Test::More::skip(
+ 'Tied hinthash values not present in extended caller() on perls older than 5.10'
+ .', regardless of mode (PP or XS)',
+ 1
+ ) if ($] < 5.010_000);
+ package DB;
+ Test::More::is( ( (caller(0))[10] || {} )->{foo}, 'bar', 'hinthash values visible in caller' );
+ }
+ }
+}
+
+
+done_testing;