File Coverage

blib/lib/URI/Split.pm
Criterion Covered Total %
statement 34 34 100.0
branch 16 16 100.0
condition 3 3 100.0
subroutine 6 6 100.0
pod 2 2 100.0
total 61 61 100.0


line stmt bran cond sub pod time code
1             package URI::Split;
2              
3 5     5   133471 use strict;
  5         11  
  5         187  
4 5     5   25 use warnings;
  5         10  
  5         483  
5              
6             our $VERSION = '5.34';
7              
8 5     5   33 use Exporter 5.57 'import';
  5         199  
  5         346  
9             our @EXPORT_OK = qw(uri_split uri_join);
10              
11 5     5   1789 use URI::Escape ();
  5         15  
  5         3605  
12              
13             sub uri_split {
14 129     129 1 356372 return $_[0] =~ m,(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?,;
15             }
16              
17             sub uri_join {
18 31     31 1 571 my($scheme, $auth, $path, $query, $frag) = @_;
19 31 100       94 my $uri = defined($scheme) ? "$scheme:" : "";
20 31 100       86 $path = "" unless defined $path;
21 31 100       91 if (defined $auth) {
    100          
22 10         38 $auth =~ s,([/?\#]), URI::Escape::escape_char($1),eg;
  4         10  
23 10         29 $uri .= "//$auth";
24 10 100 100     67 $path = "/$path" if length($path) && $path !~ m,^/,;
25             }
26             elsif ($path =~ m,^//,) {
27 1         3 $uri .= "//"; # XXX force empty auth
28             }
29 31 100       66 unless (length $uri) {
30 4         14 $path =~ s,(:), URI::Escape::escape_char($1),e while $path =~ m,^[^:/?\#]+:,;
  1         4  
31             }
32 31         72 $path =~ s,([?\#]), URI::Escape::escape_char($1),eg;
  2         17  
33 31         86 $uri .= $path;
34 31 100       80 if (defined $query) {
35 8         20 $query =~ s,(\#), URI::Escape::escape_char($1),eg;
  1         3  
36 8         18 $uri .= "?$query";
37             }
38 31 100       65 $uri .= "#$frag" if defined $frag;
39 31         100 $uri;
40             }
41              
42             1;
43              
44             __END__