home *** CD-ROM | disk | FTP | other *** search
/ CLIX - Fazer Clix Custa Nix / CLIX-CD.cdr / mac / lib / URI / URL / mailto.pm < prev    next >
Text File  |  1996-10-30  |  2KB  |  79 lines

  1. package URI::URL::mailto;
  2. require URI::URL;
  3. @ISA = qw(URI::URL);
  4.  
  5. use URI::Escape;
  6.  
  7. sub new {
  8.     my($class, $init, $base) = @_;
  9.  
  10.     my $self = bless { }, $class;
  11.     $self->{'scheme'} = lc($1) if $init =~ s/^\s*([\w\+\.\-]+)://;
  12.     $self->{'address'} = uri_unescape($init);
  13.     $self->base($base) if $base;
  14.     $self;
  15. }
  16.  
  17. sub address { shift->_elem('address', @_); }
  18.  
  19. # can use these as aliases
  20. *encoded822addr = \&address;   # URI::URL v3 compatibility
  21. *netloc         = \&address;
  22.  
  23. sub user {
  24.     my $self = shift;
  25.     $old = $self->{'address'};
  26.     if (@_) {
  27.     my $new = $old;
  28.     $new =~ s/.*\@?/$_[0]\@/;
  29.     $self->{'address'} = $new;
  30.     }
  31.     $old =~ s/\@.*//;
  32.     $old;
  33. }
  34.  
  35. sub host {
  36.     my $self = shift;
  37.     $old = $self->{'address'};
  38.     if (@_) {
  39.     my $new = $old;
  40.     $new =~ s/\@.*/\@$_[0]/;
  41.     $self->{'address'} = $new;
  42.     }
  43.     $old =~ s/.*\@//;
  44.     $old;
  45. }
  46.  
  47. sub crack
  48. {
  49.     my $self = shift;
  50.     ('mailto',           # scheme
  51.      $self->user,        # user
  52.      undef,              # passwd
  53.      $self->host,        # host
  54.      undef,              # port
  55.      $self->{'address'}, # path
  56.      undef,              # params
  57.      undef,              # query
  58.      undef               # fragment
  59.     )
  60. }
  61.  
  62. sub as_string {
  63.     my $self = shift;
  64.     my $str = ($self->{'scheme'} || "mailto") . ":";
  65.     $str .= uri_escape($self->{'address'}) if defined $self->{'address'};
  66.     $str;
  67. }
  68.  
  69. sub eq {
  70.     my($self, $other) = @_;
  71.     $other = URI::URL->new($other) unless ref $other;
  72.  
  73.     # Mail adresses are case-insensitive
  74.     $self->scheme eq $other->scheme &&
  75.       lc($self->{'address'}) eq lc($other->{'address'});
  76. }
  77.  
  78. 1;
  79.