NAME
Badger::URL - representation of a Uniform Resource Locator (URL)
SYNOPSIS
use Badger::URL;
# all-in-one URL string
my $url = Badger::URL->new(
'https://[email protected]:8080/under/ground?animal=badger#stripe'
);
# named parameters
my $url = Badger::URL->new(
scheme => 'http',
user => 'abw',
host => 'badgerpower.com',
port => '8080',
path => '/under/ground',
query => 'animal=badger',
fragment => 'stripe',
);
# methods to access standard W3C parts of URL
print $url->scheme; # http
print $url->authority; # [email protected]:8080
print $url->user; # abw
print $url->host; # badgerpower.com
print $url->port; # 8080
print $url->path; # /under/ground
print $url->query; # animal=badger
print $uri->fragment; # stripe
# additional composite methods:
print $url->server;
# https://[email protected]:8080
print $url->service;
# https://[email protected]:8080/under/ground
print $url->request;
# https://[email protected]:8080/under/ground?animal=badger
# method to return the whole URL
print $url->url();
# https://[email protected]:8080/under/ground?animal=badger#stripe
# overloaded stringification operator calls url() method
print $url;
# https://[email protected]:8080/under/ground?animal=badger#stripe
DESCRIPTION
This module implements an object for representing URLs. It can parse existing URLs to break them down into their constituent parts, and also to generate new or modified URLs.
The emphasis is on simplicity and convenience for tasks related to web programming (e.g. dispatching web applications based on the URL, generating URLs for redirects or embedding as links in HTML pages). If you want more generic URI functionality then you should consider using the URI module.
A URL looks like this:
https://[email protected]:8080/under/ground?animal=badger#stripe
\__/ \______________________/\___________/ \___________/ \____/
| | | | |
scheme authority path query fragment
The authority
part can be broken down further:
[email protected]:8080
\_/ \_____________/ \__/
| | |
user host port
A Badger::URL object will parse a URL and store the component parts internally. You can then change any of the individual parts and regenerate the URL.
my $url = Badger::URL->new(
'https://badgerpower.com/'
);
$url->port('8080');
$url->path('/under/ground');
$url->query('animal=badger');
print $url; # https://badgerpower.com:8080/under/ground?animal=badger
METHODS
new($url)
This constructor method is used to create a new URL object.
my $url = Badger::URL->new(
'https://[email protected]:8080/under/ground?animal=badger#stripe'
);
You can also specify the individual parts of the URL using named parameters.
my $url = Badger::URL->new(
scheme => 'http',
user => 'abw',
host => 'badgerpower.com',
port => '8080',
path => '/under/ground',
query => 'animal=badger',
fragment => 'stripe',
);
copy()
This method creates and returns a new Badger::URL
object as a copy of the current one.
my $copy = $url->copy;
url()
Method to return the complete URL.
print $url->url;
# https://[email protected]:8080/under/ground?animal=badger#stripe
This method is called automatically whenever the URL object is stringified.
print $url; # same as above
text()
An alias for the url() method.
scheme()
Method to get or set the scheme part of the URL.
$url = Badger::URL->new('https://badgerpower.com/);
print $url->scheme(); # http
$url->scheme('ftp');
print $url->scheme(); # ftp
authority()
Method to get or set the authority part of the URL. This is comprised of a host with optional user and/or port.
$url->authority('badgerpower.com');
$url->authority('[email protected]');
$url->authority('badgerpower.com:8080');
$url->authority('[email protected]:8080');
print $url->authority(); # [email protected]:8080
user()
Method to get or set the optional user in the authority part of the URL.
$url->user('fred');
print $url->user(); # fred
print $url->authority(); # [email protected]:8080
host()
Get or set the host in the authority part of the URL.
$url->host('example.org');
print $url->host(); # example.org
print $url->authority(); # [email protected]:8080
port()
Get or set the port in the authority part of the URL.
$url->port(1234);
print $url->port(); # 1234
print $url->authority(); # [email protected]:1234
path()
Get or set the path part of the URL.
$url->path('/right/here');
print $url->path(); # /right/here
query()
Get or set the query part of the URL. The leading '?
' is not considered part of the query and should be should not be included when setting a new query.
$url->query('animal=ferret');
print $url->query(); # animal=ferret
params()
Get or set the query parameters.
# get params
my $params = $url->params;
# set params
$url->params(
x => 10
);
fragment()
Get or set the fragment part of the URL. The leading '#' is not considered part of the fragment and should be should not be included when setting a new fragment.
$url->fragment('feet');
print $url->fragment(); # feet
server()
Returns a composite of the scheme and authority.
print $url->server();
# https://[email protected]:1234
service()
Returns a composite of the server (scheme and authority) and path (in other words, everything up to the query or fragment).
print $url->server();
# https://[email protected]:1234/right/here
request()
Returns a composite of the service (scheme, authority and path) and query (in other words, everything except the fragment).
print $url->request();
# https://[email protected]:1234/right/here?animal=badger
relative($path)
Returns a new URL with the relative path specified.
my $base = Badger::URL->new('https://badgerpower.com/example');
my $rel = $base->relative('foo/bar');
print $rel; # https://badgerpower.com/example/foo/bar
absolute($path)
Returns a new URL with the absolute path specified. The leading /
on the path provided as an argument is option. It will be assumed if not present.
my $base = Badger::URL->new('https://badgerpower.com/example');
my $rel = $base->absolute('foo/bar');
print $rel; # https://badgerpower.com/foo/bar
INTERNAL METHODS
set($items)
This method is used to set internal values.
join_authority()
This method reconstructs the authority
from the host
, port
and user
.
join_query()
This method reconstructs the query
from the query parameters.
join_url()
This method reconstructs the complete URL from its constituent parts.
split_authority()
This method splits the authority
into host
, port
and user
.
split_query()
This method splits the query
string into query parameters.
dump()
Return a text representation of the structure of the URL object, for debugging purposes.
EXPORTABLE SUBROUTINES
URL($url)
This constructor function can be used to create a new URL. If the argument is already a Badger::URL
object then it is copied to create a new object. Otherwise a new Badger::URL
object is created from scratch.
use Badger::URL 'URL';
my $url1 = URL('https://example.com/foo');
my $url2 = URL($url1);
AUTHOR
Andy Wardley https://wardley.org/
COPYRIGHT
Copyright (C) 2001-2010 Andy Wardley. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.