package URI::Split; use strict; use warnings; our $VERSION = '1.76'; use Exporter 5.57 'import'; our @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.9 KB | 0644 |
|
Heuristic.pm | File | 6.37 KB | 0644 |
|
IRI.pm | File | 794 B | 0644 |
|
QueryParam.pm | File | 4.75 KB | 0644 |
|
Split.pm | File | 2.3 KB | 0644 |
|
URL.pm | File | 5.36 KB | 0644 |
|
WithBase.pm | File | 3.77 KB | 0644 |
|
_foreign.pm | File | 107 B | 0644 |
|
_generic.pm | File | 5.69 KB | 0644 |
|
_idna.pm | File | 2.03 KB | 0644 |
|
_ldap.pm | File | 3.17 KB | 0644 |
|
_login.pm | File | 231 B | 0644 |
|
_punycode.pm | File | 5.49 KB | 0644 |
|
_query.pm | File | 2.47 KB | 0644 |
|
_segment.pm | File | 416 B | 0644 |
|
_server.pm | File | 3.64 KB | 0644 |
|
_userpass.pm | File | 1.01 KB | 0644 |
|
data.pm | File | 3.31 KB | 0644 |
|
file.pm | File | 9.53 KB | 0644 |
|
ftp.pm | File | 1.03 KB | 0644 |
|
gopher.pm | File | 2.37 KB | 0644 |
|
http.pm | File | 425 B | 0644 |
|
https.pm | File | 144 B | 0644 |
|
ldap.pm | File | 2.86 KB | 0644 |
|
ldapi.pm | File | 441 B | 0644 |
|
ldaps.pm | File | 144 B | 0644 |
|
mailto.pm | File | 1.25 KB | 0644 |
|
mms.pm | File | 125 B | 0644 |
|
news.pm | File | 1.42 KB | 0644 |
|
nntp.pm | File | 127 B | 0644 |
|
pop.pm | File | 1.18 KB | 0644 |
|
rlogin.pm | File | 129 B | 0644 |
|
rsync.pm | File | 207 B | 0644 |
|
rtsp.pm | File | 125 B | 0644 |
|
rtspu.pm | File | 126 B | 0644 |
|
sftp.pm | File | 98 B | 0644 |
|
sip.pm | File | 1.67 KB | 0644 |
|
sips.pm | File | 143 B | 0644 |
|
snews.pm | File | 172 B | 0644 |
|
ssh.pm | File | 175 B | 0644 |
|
telnet.pm | File | 128 B | 0644 |
|
tn3270.pm | File | 128 B | 0644 |
|
urn.pm | File | 2.12 KB | 0644 |
|