NetWare update from Ananth Kesari.
[p5sagit/p5-mst-13.2.git] / lib / overload.t
index f98f0c4..4db647d 100644 (file)
@@ -729,7 +729,7 @@ else {
   $iter = iterator->new(5);
   test scalar <${iter}>, '5';  # 176
   $acc = '';
-  $acc .= " $out" while $out = <${iter}>;
+  $acc .= " $out" while $out = <$iter>;
   test $acc, ' 4 3 2 1 0';     # 177
 }
 {
@@ -1046,5 +1046,43 @@ $r = Foo->new(0);
 
 test(($r || 0) == 0); # 222
 
+package utf8_o;
+
+use overload 
+  '""'  =>  sub { return $_[0]->{var}; }
+  ;
+  
+sub new
+  {
+    my $class = shift;
+    my $self =  {};
+    $self->{var} = shift;
+    bless $self,$class;
+  }
+
+package main;
+
+
+my $utfvar = new utf8_o 200.2.1;
+test("$utfvar" eq 200.2.1); # 223
+
+# 224..226 -- more %{} tests.  Hangs in 5.6.0, okay in later releases.
+# Basically this example implements strong encapsulation: if Hderef::import()
+# were to eval the overload code in the caller's namespace, the privatisation
+# would be quite transparent.
+package Hderef;
+use overload '%{}' => sub { (caller(0))[0] eq 'Foo' ? $_[0] : die "zap" };
+package Foo;
+@Foo::ISA = 'Hderef';
+sub new { bless {}, shift }
+sub xet { @_ == 2 ? $_[0]->{$_[1]} :
+         @_ == 3 ? ($_[0]->{$_[1]} = $_[2]) : undef }
+package main;
+my $a = Foo->new;
+$a->xet('b', 42);
+print $a->xet('b') == 42 ? "ok 224\n" : "not ok 224\n";
+print defined eval { $a->{b} } ? "not ok 225\n" : "ok 225\n";
+print $@ =~ /zap/ ? "ok 226\n" : "not ok 226\n";
+
 # Last test is:
-sub last {222}
+sub last {226}