package URI::Split; use strict; use warnings; our $VERSION = '1.73'; $VERSION = eval $VERSION; 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 | 820 B | 0644 |
|
QueryParam.pm | File | 4.77 KB | 0644 |
|
Split.pm | File | 2.32 KB | 0644 |
|
URL.pm | File | 5.36 KB | 0644 |
|
WithBase.pm | File | 3.77 KB | 0644 |
|
_foreign.pm | File | 133 B | 0644 |
|
_generic.pm | File | 5.71 KB | 0644 |
|
_idna.pm | File | 2.06 KB | 0644 |
|
_ldap.pm | File | 3.2 KB | 0644 |
|
_login.pm | File | 257 B | 0644 |
|
_punycode.pm | File | 5.52 KB | 0644 |
|
_query.pm | File | 2.5 KB | 0644 |
|
_segment.pm | File | 442 B | 0644 |
|
_server.pm | File | 3.66 KB | 0644 |
|
_userpass.pm | File | 1.04 KB | 0644 |
|
data.pm | File | 3.34 KB | 0644 |
|
file.pm | File | 9.53 KB | 0644 |
|
ftp.pm | File | 1.06 KB | 0644 |
|
gopher.pm | File | 2.4 KB | 0644 |
|
http.pm | File | 451 B | 0644 |
|
https.pm | File | 170 B | 0644 |
|
ldap.pm | File | 2.88 KB | 0644 |
|
ldapi.pm | File | 467 B | 0644 |
|
ldaps.pm | File | 170 B | 0644 |
|
mailto.pm | File | 1.27 KB | 0644 |
|
mms.pm | File | 151 B | 0644 |
|
news.pm | File | 1.45 KB | 0644 |
|
nntp.pm | File | 153 B | 0644 |
|
pop.pm | File | 1.2 KB | 0644 |
|
rlogin.pm | File | 155 B | 0644 |
|
rsync.pm | File | 233 B | 0644 |
|
rtsp.pm | File | 151 B | 0644 |
|
rtspu.pm | File | 152 B | 0644 |
|
sftp.pm | File | 124 B | 0644 |
|
sip.pm | File | 1.69 KB | 0644 |
|
sips.pm | File | 169 B | 0644 |
|
snews.pm | File | 198 B | 0644 |
|
ssh.pm | File | 201 B | 0644 |
|
telnet.pm | File | 154 B | 0644 |
|
tn3270.pm | File | 154 B | 0644 |
|
urn.pm | File | 2.15 KB | 0644 |
|