Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / URI / Split.pm
CommitLineData
3fea05b9 1package URI::Split;
2
3use strict;
4
5use vars qw(@ISA @EXPORT_OK);
6require Exporter;
7@ISA = qw(Exporter);
8@EXPORT_OK = qw(uri_split uri_join);
9
10use URI::Escape ();
11
12sub uri_split {
13 return $_[0] =~ m,(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?,;
14}
15
16sub uri_join {
17 my($scheme, $auth, $path, $query, $frag) = @_;
18 my $uri = defined($scheme) ? "$scheme:" : "";
19 $path = "" unless defined $path;
20 if (defined $auth) {
21 $auth =~ s,([/?\#]), URI::Escape::escape_char($1),eg;
22 $uri .= "//$auth";
23 $path = "/$path" if length($path) && $path !~ m,^/,;
24 }
25 elsif ($path =~ m,^//,) {
26 $uri .= "//"; # XXX force empty auth
27 }
28 unless (length $uri) {
29 $path =~ s,(:), URI::Escape::escape_char($1),e while $path =~ m,^[^:/?\#]+:,;
30 }
31 $path =~ s,([?\#]), URI::Escape::escape_char($1),eg;
32 $uri .= $path;
33 if (defined $query) {
34 $query =~ s,(\#), URI::Escape::escape_char($1),eg;
35 $uri .= "?$query";
36 }
37 $uri .= "#$frag" if defined $frag;
38 $uri;
39}
40
411;
42
43__END__
44
45=head1 NAME
46
47URI::Split - Parse and compose URI strings
48
49=head1 SYNOPSIS
50
51 use URI::Split qw(uri_split uri_join);
52 ($scheme, $auth, $path, $query, $frag) = uri_split($uri);
53 $uri = uri_join($scheme, $auth, $path, $query, $frag);
54
55=head1 DESCRIPTION
56
57Provides functions to parse and compose URI
58strings. The following functions are provided:
59
60=over
61
62=item ($scheme, $auth, $path, $query, $frag) = uri_split($uri)
63
64Breaks up a URI string into its component
65parts. An C<undef> value is returned for those parts that are not
66present. The $path part is always present (but can be the empty
67string) and is thus never returned as C<undef>.
68
69No sensible value is returned if this function is called in a scalar
70context.
71
72=item $uri = uri_join($scheme, $auth, $path, $query, $frag)
73
74Puts together a URI string from its parts.
75Missing parts are signaled by passing C<undef> for the corresponding
76argument.
77
78Minimal escaping is applied to parts that contain reserved chars
79that would confuse a parser. For instance, any occurrence of '?' or '#'
80in $path is always escaped, as it would otherwise be parsed back
81as a query or fragment.
82
83=back
84
85=head1 SEE ALSO
86
87L<URI>, L<URI::Escape>
88
89=head1 COPYRIGHT
90
91Copyright 2003, Gisle Aas
92
93This library is free software; you can redistribute it and/or
94modify it under the same terms as Perl itself.
95
96=cut