Perl5 と奇妙な overload の冒険

このコード、perl5.8.1 だと不思議な挙動をします(たぶん 5.8.5 以下で変な挙動をする)。

use strict;
use warnings;
use Test::More tests => 2;

{
    package Foo;

    use overload
      '""'     => sub { ${ $_[0] } },
      '+0'     => sub { ${ $_[0] } },
      fallback => 1;

    sub new {
        my $class = shift;
        my $value = shift;
        bless \$value, $class;
    }
}

my $x = Foo->new(100);
is($x > Foo->new(1) ? 100 : 1, 100);
is(Foo->new(100) > Foo->new(1) ? 100 : 1, 100);

Published: 2010-03-08(Mon) 13:48