package Set::NoReplace;

sub new { bless {}, shift; }
sub add { $_[0]{$_[1]} = 1 unless exists $_[0]{$_[1]}; return $_[0]; }
sub del { $_[0]{$_[1]} = 0 if     exists $_[0]{$_[1]}; return $_[0]; }
use overload '""' => sub { return join ', ', sort grep { $_[0]{$_} } keys %{$_[0]}; };

my $x = Set::NoReplace->new;
print $x->add( 3 )->add( 5 )->add( 1 ), "\n";
print $x->del( 3 ),"\n";
print $x->add( 3 )->add( 7 ),"\n";
