package URI::Split; use strict; use vars qw(@ISA @EXPORT_OK); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(uri_split uri_join); use URI::Escape (); sub uri_split { return $_[0] =~ m,(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?,; } sub uri_join { my($scheme, $auth, $path, $query, $frag) = @_; my $uri = defined($scheme) ? "$scheme:" : ""; $path = "" unless defined $path; if (defined $auth) { $auth =~ s,([/?\#]), URI::Escape::escape_char($1),eg; $uri .= "//$auth"; $path = "/$path" if length($path) && $path !~ m,^/,; } elsif ($path =~ m,^//,) { $uri .= "//"; # XXX force empty auth } unless (length $uri) { $path =~ s,(:), URI::Escape::escape_char($1),e while $path =~ m,^[^:/?\#]+:,; } $path =~ s,([?\#]), URI::Escape::escape_char($1),eg; $uri .= $path; if (defined $query) { $query =~ s,(\#), URI::Escape::escape_char($1),eg; $uri .= "?$query"; } $uri .= "#$frag" if defined $frag; $uri; } 1; __END__ =head1 NAME URI::Split - Parse and compose URI strings =head1 SYNOPSIS use URI::Split qw(uri_split uri_join); ($scheme, $auth, $path, $query, $frag) = uri_split($uri); $uri = uri_join($scheme, $auth, $path, $query, $frag); =head1 DESCRIPTION Provides functions to parse and compose URI strings. The following functions are provided: =over =item ($scheme, $auth, $path, $query, $frag) = uri_split($uri) Breaks up a URI string into its component parts. An C<undef> value is returned for those parts that are not present. The $path part is always present (but can be the empty string) and is thus never returned as C<undef>. No sensible value is returned if this function is called in a scalar context. =item $uri = uri_join($scheme, $auth, $path, $query, $frag) Puts together a URI string from its parts. Missing parts are signaled by passing C<undef> for the corresponding argument. Minimal escaping is applied to parts that contain reserved chars that would confuse a parser. For instance, any occurrence of '?' or '#' in $path is always escaped, as it would otherwise be parsed back as a query or fragment. =back =head1 SEE ALSO L<URI>, L<URI::Escape> =head1 COPYRIGHT Copyright 2003, Gisle Aas This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
file | Folder | 0755 |
|
|
urn | Folder | 0755 |
|
|
Escape.pm | File | 6.49 KB | 0644 |
|
Heuristic.pm | File | 6.41 KB | 0644 |
|
IRI.pm | File | 769 B | 0644 |
|
QueryParam.pm | File | 4.47 KB | 0644 |
|
Split.pm | File | 2.3 KB | 0644 |
|
URL.pm | File | 5.4 KB | 0644 |
|
WithBase.pm | File | 3.74 KB | 0644 |
|
_foreign.pm | File | 75 B | 0644 |
|
_generic.pm | File | 5.63 KB | 0644 |
|
_idna.pm | File | 1.99 KB | 0644 |
|
_ldap.pm | File | 3.17 KB | 0644 |
|
_login.pm | File | 222 B | 0644 |
|
_punycode.pm | File | 4.52 KB | 0644 |
|
_query.pm | File | 2.39 KB | 0644 |
|
_segment.pm | File | 377 B | 0644 |
|
_server.pm | File | 3.62 KB | 0644 |
|
_userpass.pm | File | 977 B | 0644 |
|
data.pm | File | 3.28 KB | 0644 |
|
file.pm | File | 9.58 KB | 0644 |
|
ftp.pm | File | 1.03 KB | 0644 |
|
gopher.pm | File | 2.34 KB | 0644 |
|
http.pm | File | 405 B | 0644 |
|
https.pm | File | 107 B | 0644 |
|
ldap.pm | File | 2.9 KB | 0644 |
|
ldapi.pm | File | 460 B | 0644 |
|
ldaps.pm | File | 107 B | 0644 |
|
mailto.pm | File | 1.24 KB | 0644 |
|
mms.pm | File | 89 B | 0644 |
|
news.pm | File | 1.39 KB | 0644 |
|
nntp.pm | File | 91 B | 0644 |
|
pop.pm | File | 1.15 KB | 0644 |
|
rlogin.pm | File | 96 B | 0644 |
|
rsync.pm | File | 197 B | 0644 |
|
rtsp.pm | File | 89 B | 0644 |
|
rtspu.pm | File | 90 B | 0644 |
|
sip.pm | File | 1.72 KB | 0644 |
|
sips.pm | File | 105 B | 0644 |
|
snews.pm | File | 136 B | 0644 |
|
ssh.pm | File | 140 B | 0644 |
|
telnet.pm | File | 95 B | 0644 |
|
tn3270.pm | File | 95 B | 0644 |
|
urn.pm | File | 1.91 KB | 0644 |
|