1package URI::_userpass;
2
3use strict;
4use URI::Escape qw(uri_unescape);
5
6sub user
7{
8    my $self = shift;
9    my $info = $self->userinfo;
10    if (@_) {
11	my $new = shift;
12	my $pass = defined($info) ? $info : "";
13	$pass =~ s/^[^:]*//;
14
15	if (!defined($new) && !length($pass)) {
16	    $self->userinfo(undef);
17	} else {
18	    $new = "" unless defined($new);
19	    $new =~ s/%/%25/g;
20	    $new =~ s/:/%3A/g;
21	    $self->userinfo("$new$pass");
22	}
23    }
24    return unless defined $info;
25    $info =~ s/:.*//;
26    uri_unescape($info);
27}
28
29sub password
30{
31    my $self = shift;
32    my $info = $self->userinfo;
33    if (@_) {
34	my $new = shift;
35	my $user = defined($info) ? $info : "";
36	$user =~ s/:.*//;
37
38	if (!defined($new) && !length($user)) {
39	    $self->userinfo(undef);
40	} else {
41	    $new = "" unless defined($new);
42	    $new =~ s/%/%25/g;
43	    $self->userinfo("$user:$new");
44	}
45    }
46    return unless defined $info;
47    return unless $info =~ s/^[^:]*://;
48    uri_unescape($info);
49}
50
511;
52