Set operations using unordered lists

#!/usr/bin/perl -w

sub printset {
  print "{\n";
  foreach $e (@_) { print "$e\n"; }
  print "}\n";
}

sub member {
  my($x, @s) = @_;
  my($e);
  foreach $e (@s) {
    if ($e eq $x) { return 1; }
  }
  return 0;
}

sub add_element {
  my($x, @s) = @_;
  if ( member( $x, @s )) { return @s; }
  else {
    push @s, $x;
    return @s;
  }
}

sub remove_element {
  my($x, @s) = @_;
  my($e);
  my(@r) = ();
  foreach $e (@s) {
    if ($e ne $x) { push @r, $e; }
  }
  return @r;
}

sub union {
  my(@s) = ();
  my($e);
  foreach $e (@_) {
    @s = add_element( $e, @s );
  }
  return @s;
}