Using
Test::URI,
../../../y seems relatively correct:
#!/usr/bin/perl
use strict;
use warnings;
use URI;
my $uri_string1 = 'http://a.b.c/d/../e/';
my $uri_string2 = 'http://a.b.c/y';
my $base = URI->new($uri_string1);
my $uri = URI->new($uri_string2);
print $base->abs($uri), "\n";
print $uri->abs($base), "\n";
print $base->rel($uri), "\n";
print $uri->rel($base), "\n";
print "\n";
use Test::URI;
use Test::More tests => 4;
use_ok( 'Test::URI' );
uri_scheme_ok( $uri_string2, 'http' );
uri_host_ok( $uri_string2, 'a.b.c' );
uri_path_ok( $uri_string2, '/y' );