use strict; use warnings; use Test::More tests => 1; # Borg is a foreign hash-based class that overloads bool package Borg; { use overload 'bool' => \&bool; sub new { my $class = shift; my %self = @_; return ( bless( \%self, $class ) ); } sub get_borg { my ( $self, $data ) = @_; return ( $self->{$data} ); } sub set_borg { my ( $self, $key, $value ) = @_; $self->{$key} = $value; } sub warn { return ('Resistance is futile'); } sub bool { my $self = shift; return scalar keys %$self; } } package Foo; { use Object::InsideOut qw(Borg); my @objs : Field('Acc'=>'obj', 'Type' => 'list'); my %init_args : InitArgs = ( 'OBJ' => { 'RE' => qr/^obj$/i, 'Field' => \@objs, 'Type' => 'list', }, 'BORG' => { 'RE' => qr/^borg$/i, } ); sub init : Init { my ( $self, $args ) = @_; $self->inherit( Borg->new() ); if ( exists( $args->{'BORG'} ) ) { $self->set_borg( 'borg' => $args->{'BORG'} ); } } } package main; MAIN: { eval { my $obj = Foo->new(); }; ok( $@ eq '', 'Created object with overloaded bool operation' ); } exit(0); # EOF