@ISA = qw(Exporter);
@EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly openhandle refaddr isvstring looks_like_number set_prototype);
-$VERSION = "1.13_01";
+$VERSION = "1.13_02";
$VERSION = eval $VERSION;
sub export_fail {
local $_ = shift;
# checks from perlfaq4
- return 1 unless defined;
+ return $] < 5.009002 unless defined;
return 1 if (/^[+-]?\d+$/); # is a +/- integer
return 1 if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/); # a C float
return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i);
# Ensure we do not trigger and tied methods
tie *F, 'MyTie';
-print "1..13\n";
+print "1..19\n";
my $i = 1;
foreach $v (undef, 10, 'string') {
print "ok ",$i++,"\n";
}
+{
+ my $z = '77';
+ my $y = \$z;
+ my $a = '78';
+ my $b = \$a;
+ tie my %x, 'Hash3', {};
+ $x{$y} = 22;
+ $x{$b} = 23;
+ my $xy = $x{$y};
+ my $xb = $x{$b};
+ print "not " unless ref($x{$y});
+ print "ok ",$i++,"\n";
+ print "not " unless ref($x{$b});
+ print "ok ",$i++,"\n";
+ print "not " unless refaddr($xy) == refaddr($y);
+ print "ok ",$i++,"\n";
+ print "not " unless refaddr($xb) == refaddr($b);
+ print "ok ",$i++,"\n";
+ print "not " unless refaddr($x{$y});
+ print "ok ",$i++,"\n";
+ print "not " unless refaddr($x{$b});
+ print "ok ",$i++,"\n";
+}
+
package FooBar;
use overload '0+' => sub { 10 },
warn "$AUTOLOAD called";
exit 1; # May be in an eval
}
+
+package Hash3;
+
+use Scalar::Util qw(refaddr);
+
+sub TIEHASH
+{
+ my $pkg = shift;
+ return bless [ @_ ], $pkg;
+}
+sub FETCH
+{
+ my $self = shift;
+ my $key = shift;
+ my ($underlying) = @$self;
+ return $underlying->{refaddr($key)};
+}
+sub STORE
+{
+ my $self = shift;
+ my $key = shift;
+ my $value = shift;
+ my ($underlying) = @$self;
+ return ($underlying->{refaddr($key)} = $key);
+}