3 @ISA=qw(URI::_generic);
6 use URI::Escape qw(uri_unescape);
11 my $old = $self->authority;
15 $new = "" unless defined $new;
16 $new =~ s/.*@//; # remove old stuff
19 $ui =~ s/@/%40/g; # protect @
22 $self->authority($new);
24 return undef if !defined($old) || $old !~ /(.*)@/;
31 my $old = $self->authority;
34 $tmp = "" unless defined $tmp;
35 my $ui = ($tmp =~ /(.*@)/) ? $1 : "";
36 my $port = ($tmp =~ /(:\d+)$/) ? $1 : "";
38 $new = "" unless defined $new;
40 $new =~ s/[@]/%40/g; # protect @
41 $port = $1 if $new =~ s/(:\d+)$//;
43 $self->authority("$ui$new$port");
45 return undef unless defined $old;
48 return uri_unescape($old);
54 my $old = $self->authority;
59 $new .= ":$port" if defined $port;
60 $self->authority($new);
62 return $1 if defined($old) && $old =~ /:(\d*)$/;
69 my $port = $self->_port(@_);
70 $port = $self->default_port if !defined($port) || $port eq "";
77 my $old = $self->authority;
78 $self->host(shift) if @_;
79 return undef unless defined $old;
80 $old =~ s/.*@//; # zap userinfo
81 $old =~ s/:$//; # empty port does not could
82 $old .= ":" . $self->port unless $old =~ /:/;
87 sub default_port { undef }
92 my $other = $self->SUPER::canonical;
93 my $host = $other->host || "";
94 my $port = $other->_port;
95 my $uc_host = $host =~ /[A-Z]/;
96 my $def_port = defined($port) && ($port eq "" ||
97 $port == $self->default_port);
98 if ($uc_host || $def_port) {
99 $other = $other->clone if $other == $self;
100 $other->host(lc $host) if $uc_host;
101 $other->port(undef) if $def_port;