| Acme-URL documentation | Contained in the Acme-URL distribution. |
Acme::URL - Bareword URL with HTTP request
Version 0.01
URL without any strings attached performing a HTTP request returning the content:
use Modern::Perl;
use JSON qw(decode_json);
use Acme::URL;
# print the json
say http://twitter.com/statuses/show/6592721580.json;
# => "He nose the truth."
say decode_json( http://twitter.com/statuses/show/6592721580.json )->{text};
See http://transfixedbutnotdead.com/2009/12/16/url-develdeclare-and-no-strings-attached/
NB. This module is just a play thing and just intended as an investigation into using Devel::Declare. So go play with it and don't do anything stupid with it :)
NB. Devel::Declare will always trigger the bareword http
Barry Walsh, <draegtun at cpan.org>
Please report any bugs or feature requests to bug-acme-url at rt.cpan.org, or through
the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Acme-URL. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc Acme::URL
You can also look for information at:
See Devel::Declare for the black magic used!
This is (near) beta software. I'll strive to make it better each and every day!
However I accept no liability whatsoever should this software do what you expected ;-)
Copyright 2009 Barry Walsh (Draegtun Systems Ltd), all rights reserved.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
| Acme-URL documentation | Contained in the Acme-URL distribution. |
package Acme::URL; use strict; use warnings; use 5.008001; use Devel::Declare (); use LWP::Simple (); use base 'Devel::Declare::Context::Simple'; our $VERSION = '0.01'; sub import { my $class = shift; my $caller = caller; my $ctx = __PACKAGE__->new; Devel::Declare->setup_for( $caller, { http => { const => sub { $ctx->parser(@_) }, }, }, ); no strict 'refs'; *{$caller.'::http'} = sub ($) { LWP::Simple::get( $_[0] ) }; } sub parser { my $self = shift; $self->init(@_); $self->skip_declarator; # skip past "http" my $line = $self->get_linestr; # get me current line of code my $pos = $self->offset; # position just after "http" my $url = substr $line, $pos; # url & everything after "http" for my $c (split //, $url) { # if blank, semicolon, closing parenthesis or a comma(!) then no longer a URL last if $c eq q{ }; last if $c eq q{;}; last if $c eq q{)}; last if $c eq q{,}; $pos++; } # wrap the url with http() sub and quotes substr( $line, $pos, 0 ) = q{")}; substr( $line, $self->offset, 0 ) = q{("http}; # pass back changes to parser $self->set_linestr( $line ); return; } 1; __END__