package Number; use strict; # Hash to hold singletons use vars qw ($numbers); $numbers = {}; sub new { my ($class, $number, $text) = @_; # Check for and return an existing singleton return $numbers->{$number} if ($numbers->{$number}); # Build the object my $self = {}; bless($self, $class); $self->{'number'} = $number; $self->{'text'} = $text; # Store it as the singleton definition and return $numbers->{$number} = $self; return $numbers->{$number}; } sub asNumber { my ($self) = @_; return $self->{'number'}; } sub asText { my ($self) = @_; return $self->{'text'}; } sub STORABLE_freeze { my ($self, $cloning) = @_; my $num = $self->asNumber(); my $txt = $self->asText(); print "Freeze $num $txt\n"; return "$num$txt"; } sub STORABLE_attach { my ($class, $cloning, $serialized) = @_; my ($num, $txt) = $serialized =~ /(\d+)(\w+)/; my $self = $class->new($num, $txt); print "Attach $num $txt $self\n"; return $self; } 1;