}
}
-use vars qw($skip);
-
-BEGIN {
- $|=1;
- require Scalar::Util;
- if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) {
- print("1..0\n");
- $skip=1;
- }
-
- $DEBUG = 0;
-
- if ($DEBUG && eval { require Devel::Peek } ) {
- Devel::Peek->import('Dump');
- }
- else {
- *Dump = sub {};
- }
+use Scalar::Util ();
+use Test::More (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL)
+ ? (skip_all => 'weaken requires XS version')
+ : (tests => 22);
+
+if (0) {
+ require Devel::Peek;
+ Devel::Peek->import('Dump');
}
-
-eval <<'EOT' unless $skip;
-use Scalar::Util qw(weaken isweak);
-print "1..22\n";
-
-######################### End of black magic.
-
-$cnt = 0;
-
-sub ok {
- ++$cnt;
- if($_[0]) { print "ok $cnt\n"; } else {print "not ok $cnt\n"; }
- return $_[0];
+else {
+ *Dump = sub {};
}
-$| = 1;
+Scalar::Util->import(qw(weaken isweak));
if(1) {
$y = \$x;
$z = \$x;
}
-print "# START:\n";
+print "# START\n";
Dump($y); Dump($z);
-ok( $y ne "" and $z ne "" );
-weaken($y);
+ok( ref($y) and ref($z));
print "# WEAK:\n";
+weaken($y);
Dump($y); Dump($z);
-ok( $y ne "" and $z ne "" );
-undef($z);
+ok( ref($y) and ref($z));
print "# UNDZ:\n";
+undef($z);
Dump($y); Dump($z);
ok( not (defined($y) and defined($z)) );
-undef($y);
print "# UNDY:\n";
+undef($y);
Dump($y); Dump($z);
ok( not (defined($y) and defined($z)) );
print "# FIN:\n";
Dump($y); Dump($z);
-# exit(0);
-
-# }
-# {
#
# Case 2: one reference, which is weakened
#
-# kill 5,$$;
-
print "# CASE 2:\n";
{
$y = \$x;
}
-ok( $y ne "" );
+ok( ref($y) );
print "# BW: \n";
Dump($y);
weaken($y);
print "# EXITBLOCK\n";
}
-# exit(0);
-
#
# Case 3: a circular structure
#
-# kill 5, $$;
-
$flag = 0;
{
my $y = bless {}, Dest;
print "# 3: $y\n";
weaken($y->{Self});
print "# WKED\n";
- ok( $y ne "" );
+ ok( ref($y) );
print "# VALS: HASH ",$y," SELF ",\$y->{Self}," Y ",\$y,
" FLAG: ",\$y->{Flag},"\n";
print "# VPRINT\n";
undef($y);
ok( not defined $y);
-ok($z ne "");
+ok( ref($z) );
#
# Case 7: test weaken on a read only ref
#
-if ($] < 5.008003) {
+SKIP: {
# Doesn't work for older perls, see bug [perl #24506]
- print "# Skip next 5 tests on perl $]\n";
- for (1..5) {
- ok(1);
- }
-}
-else {
+ skip("Test does not work with perl < 5.8.3", 5) if $] < 5.008003;
+
$a = eval '\"hello"';
ok(ref($a)) or print "# didn't get a ref from eval\n";
$b = $a;
print "# INCFLAG\n";
${$_[0]{Flag}} ++;
}
-EOT