use strict "vars";
use strict "refs";
use strict "subs";
+ use strict "untie";
use strict;
no strict "vars";
If no import list is supplied, all possible restrictions are assumed.
(This is the safest mode to operate in, but is sometimes too strict for
-casual programming.) Currently, there are three possible things to be
-strict about: "subs", "vars", and "refs".
+casual programming.) Currently, there are four possible things to be
+strict about: "subs", "vars", "refs", and "untie".
=over 6
+=item C<strict untie>
+
+This generates a runtime error if any references to the object returned
+by C<tie> (or C<tied>) still exist when C<untie> is called. Note that
+to get this strict behaviour, the C<use strict 'untie'> statement must
+be in the same scope as the C<untie>. See L<perlfunc/tie>,
+L<perlfunc/untie>, L<perlfunc/tied> and L<perltie>.
+
+ use strict 'untie';
+ $a = tie %a, 'SOME_PKG';
+ $b = tie %b, 'SOME_PKG';
+ $b = 0;
+ tie %c, PKG;
+ $c = tied %c;
+ untie %a ; # blows up, $a is a valid object reference.
+ untie %b; # ok, $b is not a reference to the object.
+ untie %c ; # blows up, $c is a valid object reference.
+
=back
See L<perlmod/Pragmatic Modules>.
$bits |= 0x00000002 if $sememe eq 'refs';
$bits |= 0x00000200 if $sememe eq 'subs';
$bits |= 0x00000400 if $sememe eq 'vars';
+ $bits |= 0x00000800 if $sememe eq 'untie';
}
$bits;
}
sub import {
shift;
- $^H |= bits(@_ ? @_ : qw(refs subs vars));
+ $^H |= bits(@_ ? @_ : qw(refs subs vars untie));
}
sub unimport {
shift;
- $^H &= ~ bits(@_ ? @_ : qw(refs subs vars));
+ $^H &= ~ bits(@_ ? @_ : qw(refs subs vars untie));
}
1;