The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


HTML::ResolveLink - Resolve relative links in (X)HTML into absolute URI


  use HTML::ResolveLink;

  my $resolver = HTML::ResolveLink->new(
      base => '',
      callback => sub {
         my($uri, $old) = @_;
         # ...
  $html = $resolver->resolve($html);


HTML::ResolveLink is a module to rewrite relative links in XHTML or HTML into absolute URI.

For example. when you have

  <a href="foo.html">foo</a>
  <img src="/bar.gif" />

and use as base URL, you'll get:

  <a href="">foo</a>
  <img src="" />

If the parser encounters <base> tag in HTML, it'll honor that.


  my $resolver = HTML::ResolveLink->new(
      base => '',
      callback => \&callback,

base is a required parameter, which is used to resolve the relative URI found in the document.

callback is an optional parameter, which is a callback subroutine reference which would take new resolved URI and the original path as arguments.

Here's an example code to illustrate how to use callback function.

  my $count;
  my $resolver = HTML::ResolveLink->new(
      base => $base,
      callback => sub {
          my($uri, $old) = @_;
          warn "$old is resolved to $uri";

  $html = $resolver->resolve($html);

  if ($count) {
      warn "HTML::ResolveLink resolved $count links";
  $html = $resolver->resolve($html);

Resolves relative URI found in $html into absolute and returns a string containing rewritten one.

  $count = $resolver->resolved_count;

Returns how many URIs are resolved during the previous resolve method call. This should be called after the resolve, otherwise returns undef.


Tatsuhiko Miyagawa <>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


HTML::Parser, HTML::LinkExtor

1 POD Error

The following errors were encountered while parsing the POD:

Around line 193:

You forgot a '=back' before '=head1'