NAME URL::Transform - perform URL transformations in various document types SYNOPSIS my $output; my $urlt = URL::Transform->new( 'document_type' => 'text/html;charset=utf-8', 'content_encoding' => 'gzip', 'output_function' => sub { $output .= "@_" }, 'transform_function' => sub { return (join '|', @_) }, ); $urlt->parse_file($Bin.'/data/URL-Transform-01.html'); print "and this is the output: ", $output; DESCRIPTION URL::Transform is a generic module to perform an url transformation in a documents. Accepts callback function using which the url link can be changed. There are different modules to handle different document types, elements or attributes: `text/html', `text/vnd.wap.wml', `application/xhtml+xml', `application/vnd.wap.xhtml+xml' URL::Transform::using::HTML::Parser, URL::Transform::using::XML::SAX (incomplete was used only to benchmark) `text/css' URL::Transform::using::CSS::RegExp `text/html/meta-content' URL::Transform::using::HTML::Meta `application/x-javascript' URL::Transform::using::Remove By passing `parser' option to the `URL::Transform->new()' constructor you can set what library will be used to parse and execute the output and transform functions. Note that the elements inside for example `text/html' that are of a different type will be transformed via default_for($document_type) modules. `transform_function' is called with following arguments: transform_function->( 'tag_name' => 'img', 'attribute_name' => 'src', 'url' => 'http://search.cpan.org/s/img/cpan_banner.png', ); and must return (un)modified url as the return value. `output_function' is called with (already modified) document chunk for outputting. PROPERTIES content_encoding document_type parser transform_function output_function parser For HTML/XML can be HTML::Parser, XML::SAX document_type text/html - default transform_function Function that will be called to make the transformation. The function will receive one argument - url text. output_function Reference to function that will receive resulting output. The default one is to use print. content_encoding Can be set to `gzip' or `deflate'. By default it is `undef', so there is no content encoding. METHODS new Object constructor. Requires `transform_function' a CODE ref argument. The rest of the arguments are optional. Here is the list with defaults: document_type => 'text/html;charset=utf-8', output_function => sub { print @_ }, parser => 'HTML::Parser', content_encoding => undef, default_for($document_type) Returns default parser for a supplied $document_type. Can be used also as a set function with additional argument - parser name. If called as object method set the default parser for the object. If called as module function set the default parser for a whole module. parse_string($string) Submit document as a string for parsing. This some function must be implemented by helper parsing classes. parse_chunk($chunk) Submit chunk of a document for parsing. This some function should be implemented by helper parsing classes. can_parse_chunks Return true/false if the parser can parse in chunks. parse_file($file_name) Submit file for parsing. This some function should be implemented by helper parsing classes. link_tags # To simplify things, reformat the %HTML::Tagset::linkElements # hash so that it is always a hash of hashes. # Construct a hash of tag names that may have links. js_attributes # Construct a hash of all possible JavaScript attribute names decode_string($string) Will return decoded string suitable for parsing. Decoding is chosen according to the $self->content_encoding. Decoding is run automatically for every chunk/string/file. encode_string($string) Will return encoded string. Encoding is chosen according to the $self->content_encoding. NOTE if you want to have your content encoded back to the $self->content_encoding you will have to run this method in your code. Argument to the `output_function()' are always plain text. get_supported_content_encodings() Returns hash reference of supported content encodings. benchmarks Benchmark: timing 10000 iterations of HTML::Parser , XML::LibXML::SAX, XML::SAX::PurePerl... HTML::Parser : 3 wallclock secs ( 2.41 usr + 0.04 sys = 2.45 CPU) @ 4081.63/s (n=10000) XML::LibXML::SAX : 29 wallclock secs (27.22 usr + 0.11 sys = 27.33 CPU) @ 365.90/s (n=10000) XML::SAX::PurePerl: 192 wallclock secs (180.62 usr + 0.50 sys = 181.12 CPU) @ 55.21/s (n=10000) TODO There are urls in `pics' meta tag: `