Acme::URL - Bareword URL with HTTP request


Acme-URL documentation Contained in the Acme-URL distribution.

Index


Code Index:

NAME

Top

Acme::URL - Bareword URL with HTTP request

VERSION

Top

Version 0.01

SYNOPSIS

Top

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};




DESCRIPTION

Top

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 :)

EXPORT

Top

http()

NB. Devel::Declare will always trigger the bareword http

FUNCTIONS

Top

import

parser

AUTHOR

Top

Barry Walsh, <draegtun at cpan.org>

BUGS

Top

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.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Acme::URL




You can also look for information at:

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Acme-URL

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Acme-URL

* CPAN Ratings

http://cpanratings.perl.org/d/Acme-URL

* Search CPAN

http://search.cpan.org/dist/Acme-URL/

ACKNOWLEDGEMENTS

Top

See Devel::Declare for the black magic used!

DISCLAIMER

Top

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 & LICENSE

Top


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__