package main;
$| = 1;
-use Test::More tests => 536;
+use Test::More tests => 577;
$a = new Oscalar "087";
}
is($int, 9);
is($out, 1024);
+is($int, 9);
+{
+ BEGIN { overload::constant 'integer' => sub {$int++; shift()+1}; }
+ eval q{$out = 42};
+}
+is($int, 10);
+is($out, 43);
$foo = 'foo';
$foo1 = 'f\'o\\o';
like(overload::StrVal(sub{1}), qr/^CODE\(0x[0-9a-f]+\)$/);
like(overload::StrVal(\*GLOB), qr/^GLOB\(0x[0-9a-f]+\)$/);
like(overload::StrVal(\$o), qr/^REF\(0x[0-9a-f]+\)$/);
- like(overload::StrVal(qr/a/), qr/^Regexp=SCALAR\(0x[0-9a-f]+\)$/);
+ like(overload::StrVal(qr/a/), qr/^Regexp=REGEXP\(0x[0-9a-f]+\)$/);
like(overload::StrVal($o), qr/^perl31793=ARRAY\(0x[0-9a-f]+\)$/);
like(overload::StrVal($of), qr/^perl31793_fb=ARRAY\(0x[0-9a-f]+\)$/);
like(overload::StrVal($no), qr/^no_overload=ARRAY\(0x[0-9a-f]+\)$/);
ok(!$b, "Expect overloaded boolean");
ok(!$a, "Expect overloaded boolean");
}
+
+{
+ package Flrbbbbb;
+ use overload
+ bool => sub { shift->{truth} eq 'yes' },
+ '0+' => sub { shift->{truth} eq 'yes' ? '1' : '0' },
+ '!' => sub { shift->{truth} eq 'no' },
+ fallback => 1;
+
+ sub new { my $class = shift; bless { truth => shift }, $class }
+
+ package main;
+
+ my $yes = Flrbbbbb->new('yes');
+ my $x;
+ $x = 1 if $yes; is($x, 1);
+ $x = 2 unless $yes; is($x, 1);
+ $x = 3 if !$yes; is($x, 1);
+ $x = 4 unless !$yes; is($x, 4);
+
+ my $no = Flrbbbbb->new('no');
+ $x = 0;
+ $x = 1 if $no; is($x, 0);
+ $x = 2 unless $no; is($x, 2);
+ $x = 3 if !$no; is($x, 3);
+ $x = 4 unless !$no; is($x, 3);
+
+ $x = 0;
+ $x = 1 if !$no && $yes; is($x, 1);
+ $x = 2 unless !$no && $yes; is($x, 1);
+ $x = 3 if $no || !$yes; is($x, 1);
+ $x = 4 unless $no || !$yes; is($x, 4);
+
+ $x = 0;
+ $x = 1 if !$no || !$yes; is($x, 1);
+ $x = 2 unless !$no || !$yes; is($x, 1);
+ $x = 3 if !$no && !$yes; is($x, 1);
+ $x = 4 unless !$no && !$yes; is($x, 4);
+}
+
{
use Scalar::Util 'weaken';
package numify_other;
use overload "0+" => sub { $_[0][0]++; $_[0][1] = bless [], 'numify_int' };
package numify_by_fallback;
- use overload "-" => sub { 1 }, fallback => 1;
+ use overload fallback => 1;
package main;
my $o = bless [], 'numify_int';
my $m = bless $aref, 'numify_by_fallback';
is(int($m), $num_val, 'numifies to usual reference value');
+ is(abs($m), $num_val, 'numifies to usual reference value');
+ is(-$m, -$num_val, 'numifies to usual reference value');
+ is(0+$m, $num_val, 'numifies to usual reference value');
+ is($m+0, $num_val, 'numifies to usual reference value');
+ is($m+$m, 2*$num_val, 'numifies to usual reference value');
+ is(0-$m, -$num_val, 'numifies to usual reference value');
+ is(1*$m, $num_val, 'numifies to usual reference value');
+ is($m/1, $num_val, 'numifies to usual reference value');
+ is($m%100, $num_val%100, 'numifies to usual reference value');
+ is($m**1, $num_val, 'numifies to usual reference value');
+
+ is(abs($aref), $num_val, 'abs() of ref');
+ is(-$aref, -$num_val, 'negative of ref');
+ is(0+$aref, $num_val, 'ref addition');
+ is($aref+0, $num_val, 'ref addition');
+ is($aref+$aref, 2*$num_val, 'ref addition');
+ is(0-$aref, -$num_val, 'subtraction of ref');
+ is(1*$aref, $num_val, 'multiplicaton of ref');
+ is($aref/1, $num_val, 'division of ref');
+ is($aref%100, $num_val%100, 'modulo of ref');
+ is($aref**1, $num_val, 'exponentiation of ref');
+}
+
+{
+ package CopyConstructorFallback;
+ use overload
+ '++' => sub { "$_[0]"; $_[0] },
+ fallback => 1;
+ sub new { bless {} => shift }
+
+ package main;
+
+ my $o = CopyConstructorFallback->new;
+ my $x = $o++; # would segfault
+ my $y = ++$o;
+ is($x, $o, "copy constructor falls back to assignment (postinc)");
+ is($y, $o, "copy constructor falls back to assignment (preinc)");
}
+
+# EOF