!/usr/bin/env perl
use strict;
use warnings;
use URI;
# a relative url:
my $rel_url = '../../../../../abc.html';
# the base url, where I stand now:
my @base_uris = ('http://server.com/123/xyz',
'http://server.com/1/2/3/4/5',
'http://server.com/1/2/3/4/5/');
# URI's absolute url:
foreach my $abase (@base_uris){
my $uri = URI->new_abs( $rel_url, $abase );
print "absolute for base: $abase is\n\t".$uri."\n";
}
####
absolute for base: http://server.com/123/xyz is
http://server.com/../../../../abc.html
absolute for base: http://server.com/1/2/3/4/5 is
http://server.com/../abc.html
absolute for base: http://server.com/1/2/3/4/5/ is
http://server.com/abc.html
####
# Some servers erroneously return a relative URL for redirects,
# so make it absolute if it not already is.
local $URI::ABS_ALLOW_RELATIVE_SCHEME = 1;
my $base = $response->base;
$referral_uri = "" unless defined $referral_uri;
$referral_uri
= $HTTP::URI_CLASS->new($referral_uri, $base)->abs($base);