package Toy_Iterator;
use overload
'""' => sub { $_[0] },
bool => sub { ! $_[0]->done_p() },
'++' => \&inc,
'=' => sub { $_[0] },
;
sub new {
my ( $class, $arg ) = @_;
my $self = {};
bless $self, $class;
$self->set ( $arg );
return $self;
}
sub set { $_[0]->{_i} = $_[1] }
sub get { return $_[0]->{_i} }
sub inc { ++$_[0]->{_i} }
sub done_p { $_[0]->{_i} > 5 }
sub DESTROY { print "Destroying $_[0]\n" }
package main;
use Devel::Peek;
my $a = Toy_Iterator->new ( 2 );
while ( $a++ ) {
print "$a -> " . $a->get() . "\n";
}
# print "\n"; Dump $a; print "\n";
print "undef'ing \$a...\n";
undef $a;
print "done undef'ing\n";
####
Toy_Iterator=HASH(0x80fbc2c) -> 3
Toy_Iterator=HASH(0x80fbc2c) -> 4
Toy_Iterator=HASH(0x80fbc2c) -> 5
undef'ing $a...
done undef'ing
Destroying Toy_Iterator=HASH(0x80fbc2c)
####
Toy_Iterator=HASH(0x80fbc2c) -> 3
Toy_Iterator=HASH(0x80fbc2c) -> 4
Toy_Iterator=HASH(0x80fbc2c) -> 5
undef'ing $a...
Destroying Toy_Iterator=HASH(0x80fbc2c)
done undef'ing