Mojo::URL − Uniform Resource Locator
use Mojo::URL;
# Parse
my $url =
Mojo::URL−>new('http://sri:[email protected]:3000/foo?foo=bar#23');
say $url−>scheme;
say $url−>userinfo;
say $url−>host;
say $url−>port;
say $url−>path;
say $url−>query;
say $url−>fragment;
# Build
my $url = Mojo::URL−>new;
$url−>scheme('http');
$url−>host('example.com');
$url−>port(3000);
$url−>path('/foo/bar');
$url−>query(foo => 'bar');
$url−>fragment(23);
say "$url";
Mojo::URL implements a subset of RFC 3986 <https://tools.ietf.org/html/rfc3986>, RFC 3987 <https://tools.ietf.org/html/rfc3987> and the URL Living Standard <https://url.spec.whatwg.org> for Uniform Resource Locators with support for IDNA and IRIs.
Mojo::URL implements the following attributes.
my $base =
$url−>base;
$url = $url−>base(Mojo::URL−>new);
Base of this URL, defaults to a Mojo::URL object.
"http://example.com/a/b?c"
Mojo::URL−>new("/a/b?c")−>base(Mojo::URL−>new("http://example.com"))−>to_abs;
my $fragment =
$url−>fragment;
$url =
$url−>fragment('â¥mojoliciousâ¥');
Fragment part of this URL.
#
"yada"
Mojo::URL−>new('http://example.com/foo?bar=baz#yada')−>fragment;
my $host =
$url−>host;
$url = $url−>host('127.0.0.1');
Host part of this URL.
#
"example.com"
Mojo::URL−>new('http://sri:[email protected]:8080/foo')−>host;
my $port =
$url−>port;
$url = $url−>port(8080);
Port part of this URL.
#
"8080"
Mojo::URL−>new('http://sri:[email protected]:8080/foo')−>port;
my $scheme =
$url−>scheme;
$url = $url−>scheme('http');
Scheme part of this URL.
#
"http"
Mojo::URL−>new('http://example.com/foo')−>scheme;
my $info =
$url−>userinfo;
$url = $url−>userinfo('root:â¥');
Userinfo part of this URL.
#
"sri:t3st"
Mojo::URL−>new('https://sri:[email protected]/foo')−>userinfo;
Mojo::URL inherits all methods from Mojo::Base and implements the following new ones.
my $url2 = $url−>clone;
Return a new Mojo::URL object cloned from this URL.
my $host_port =
$url−>host_port;
$url = $url−>host_port('example.com:8080');
Normalized version of "host" and "port".
#
"xn−−n3h.net:8080"
Mojo::URL−>new('http://â.net:8080/test')−>host_port;
# "example.com"
Mojo::URL−>new('http://example.com/test')−>host_port;
my $ihost =
$url−>ihost;
$url =
$url−>ihost('xn−−bcher−kva.ch');
Host part of this URL in punycode format.
#
"xn−−n3h.net"
Mojo::URL−>new('http://â.net')−>ihost;
# "example.com"
Mojo::URL−>new('http://example.com')−>ihost;
my $bool = $url−>is_abs;
Check if URL is absolute.
# True
Mojo::URL−>new('http://example.com')−>is_abs;
Mojo::URL−>new('http://example.com/test/index.html')−>is_abs;
# False
Mojo::URL−>new('test/index.html')−>is_abs;
Mojo::URL−>new('/test/index.html')−>is_abs;
Mojo::URL−>new('//example.com/test/index.html')−>is_abs;
my $url =
Mojo::URL−>new;
my $url =
Mojo::URL−>new('http://127.0.0.1:3000/foo?f=b&baz=2#foo');
Construct a new Mojo::URL object and "parse" URL if necessary.
$url = $url−>parse('http://127.0.0.1:3000/foo/bar?fo=o&baz=23#foo');
Parse relative or absolute URL.
#
"/test/123"
$url−>parse('/test/123?foo=bar')−>path;
# "example.com"
$url−>parse('http://example.com/test/123?foo=bar')−>host;
# "[email protected]"
$url−>parse('mailto:[email protected]')−>path;
my $password = $url−>password;
Password part of "userinfo".
#
"s3cret"
Mojo::URL−>new('http://isabel:[email protected]')−>password;
# "s:3:c:r:e:t"
Mojo::URL−>new('http://isabel:s:3:c:r:e:[email protected]')−>password;
my $path =
$url−>path;
$url = $url−>path('foo/bar');
$url = $url−>path('/foo/bar');
$url = $url−>path(Mojo::Path−>new);
Path part of this URL, relative paths will be merged with "merge" in Mojo::Path, defaults to a Mojo::Path object.
#
"test"
Mojo::URL−>new('http://example.com/test/Mojo')−>path−>parts−>[0];
# "/test/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo')−>path−>merge('DOM/HTML');
# "http://example.com/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo')−>path('/DOM/HTML');
# "http://example.com/test/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo')−>path('DOM/HTML');
# "http://example.com/test/Mojo/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo/')−>path('DOM/HTML');
my $path_query =
$url−>path_query;
$url =
$url−>path_query('/foo/bar?a=1&b=2');
Normalized version of "path" and "query".
#
"/test?a=1&b=2"
Mojo::URL−>new('http://example.com/test?a=1&b=2')−>path_query;
# "/"
Mojo::URL−>new('http://example.com/')−>path_query;
my $proto = $url−>protocol;
Normalized version of "scheme".
#
"http"
Mojo::URL−>new('HtTp://example.com')−>protocol;
my $query =
$url−>query;
$url = $url−>query({merge => 'to'});
$url = $url−>query([append => 'with']);
$url = $url−>query(replace => 'with');
$url = $url−>query('a=1&b=2');
$url =
$url−>query(Mojo::Parameters−>new);
Query part of this URL, key/value pairs in an array reference will be appended with "append" in Mojo::Parameters, and key/value pairs in a hash reference merged with "merge" in Mojo::Parameters, defaults to a Mojo::Parameters object.
# "2"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query−>param('b');
# "a=2&b=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query−>merge(a
=> 2, c => 3);
# "http://example.com?a=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query(a
=> 2, c => 3);
# "http://example.com?a=2&a=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query(a
=> [2, 3]);
# "http://example.com?a=2&b=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query({a
=> 2, c => 3});
# "http://example.com?b=2"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query({a
=> undef});
# "http://example.com?a=1&b=2&a=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query([a
=> 2, c => 3]);
my $abs =
$url−>to_abs;
my $abs =
$url−>to_abs(Mojo::URL−>new('http://example.com/foo'));
Return a new Mojo::URL object cloned from this relative URL and turn it into an absolute one using "base" or provided base URL.
#
"http://example.com/foo/baz.xml?test=123"
Mojo::URL−>new('baz.xml?test=123')
−>to_abs(Mojo::URL−>new('http://example.com/foo/bar.html'));
# "http://example.com/baz.xml?test=123"
Mojo::URL−>new('/baz.xml?test=123')
−>to_abs(Mojo::URL−>new('http://example.com/foo/bar.html'));
# "http://example.com/foo/baz.xml?test=123"
Mojo::URL−>new('//example.com/foo/baz.xml?test=123')
−>to_abs(Mojo::URL−>new('http://example.com/foo/bar.html'));
my $str = $url−>to_string;
Turn URL into a string. Note that "userinfo" will not be included for security reasons.
#
"http://mojolicious.org"
Mojo::URL−>new−>scheme('http')−>host('mojolicious.org')−>to_string;
# "http://mojolicious.org"
Mojo::URL−>new('http://daniel:[email protected]')−>to_string;
my $str = $url−>to_unsafe_string;
Same as "to_string", but includes "userinfo".
#
"http://daniel:[email protected]"
Mojo::URL−>new('http://daniel:[email protected]')−>to_unsafe_string;
my $username = $url−>username;
Username part of "userinfo".
#
"isabel"
Mojo::URL−>new('http://isabel:[email protected]')−>username;
Mojo::URL overloads the following operators.
my $bool = !!$url;
Always true.
my $str = "$url";
Alias for "to_string".
Mojolicious, Mojolicious::Guides, <https://mojolicious.org>.