#!./perl
-print "1..23\n";
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+print "1..36\n";
print defined($a) ? "not ok 1\n" : "ok 1\n";
eval { $1 = undef };
print $@ =~ /^Modification of a read/ ? "ok 23\n" : "not ok 23\n";
+{
+ require Tie::Hash;
+ tie my %foo, 'Tie::StdHash';
+ print defined %foo ? "ok 24\n" : "not ok 24\n";
+ %foo = ( a => 1 );
+ print defined %foo ? "ok 25\n" : "not ok 25\n";
+}
+
+{
+ require Tie::Array;
+ tie my @foo, 'Tie::StdArray';
+ print defined @foo ? "ok 26\n" : "not ok 26\n";
+ @foo = ( a => 1 );
+ print defined @foo ? "ok 27\n" : "not ok 27\n";
+}
+
+{
+ # [perl #17753] segfault when undef'ing unquoted string constant
+ eval 'undef tcp';
+ print $@ =~ /^Can't modify constant item/ ? "ok 28\n" : "not ok 28\n";
+}
+
+# bugid 3096
+# undefing a hash may free objects with destructors that then try to
+# modify the hash. To them, the hash should appear empty.
+
+$test = 29;
+%hash = (
+ key1 => bless({}, 'X'),
+ key2 => bless({}, 'X'),
+);
+undef %hash;
+sub X::DESTROY {
+ print "not " if keys %hash; print "ok $test\n"; $test++;
+ print "not " if values %hash; print "ok $test\n"; $test++;
+ print "not " if each %hash; print "ok $test\n"; $test++;
+ print "not " if defined delete $hash{'key2'}; print "ok $test\n"; $test++;
+}