NAME
    perl5::tobyink - a lightweight collection of syntax extensions

SYNOPSIS
     use perl5::tobyink;

DESCRIPTION
    "use perl5::tobyink" is roughly equivalent to:

     use 5.010;
     use autodie;
     use common::sense;
     use constant { false => !1, true => !!1 };
     use mro qw(c3);
     use namespace::sweep;
     use syntax qw(maybe perform ql qwa);
     use true;
     use utf8::all;
 
     no indirect qw(:fatal);
 
     require Encode;
     require IO::Handle;
 
     use Carp qw(carp croak confess);
     use Devel::Assert qw(0);
     use List::Util qw(first max min reduce shuffle);
     use List::MoreUtils qw(uniq);
     use Method::Signatures::Simple 1.00 method_keyword => 'method', function_keyword => 'function';
     use Object::Tap -package => 'UNIVERSAL';
     use Path::Class qw(file dir);
     use POSIX qw(floor ceil);
     use Scalar::Util qw(blessed isweak looks_like_number refaddr reftype weaken);
     use Try::Tiny 0;
 
     *trim      = \&perl5::tobyink::trim;
     *ltrim     = \&perl5::tobyink::ltrim;
     *rtrim     = \&perl5::tobyink::rtrim;
     *normalize = \&perl5::tobyink::normalize;

  Object Oriented Programming
    Calling with the parameter "-class", will also act as "use Any::Mo", and
    thus will set up a "new" method for your package, provide "has",
    "extends" and other antlery sugar.

     {
         package Person;
         use perl5::tobyink -class;
         has name => (is => read_only, isa => 'Str');
         has age  => (is => read_only, isa => 'Num');
     }

    With the "-class" parameter, additional constants read_only and
    read_write are exported too.

    If you'd rather use Moose or Mouse or whatever, then don't pass "-class"
    and use Moose/Mouse/whatever manually. The read_only/read_write
    constants can be exported using the "-antlers" parameter.

     {
         package Person;
         use perl5::tobyink -antlers;
         use Any::Moose;
         has name => (is => read_only, isa => 'Str');
         has age  => (is => read_only, isa => 'Num');
     }

  Assertions
    You can include assertions in your code a la:

     method set_name ($new)
     {
         assert(length $new > 0);
         $self->{name} = $new;
     }

    By default assertions are not checked at all; they are short-circuited
    entirely. To have them checked, you need to "use Devel::Assert -all".
    One easy way is to run your script like this:

     perl -MDevel::Assert=-all yourscript.pl

BUGS
    Please report any bugs to
    <http://rt.cpan.org/Dist/Display.html?Queue=perl5-tobyink>.

SEE ALSO
    Any::Mo, autodie, Carp, common::sense, Encode, Devel::Assert, indirect,
    IO::Handle, List::Util, List::MoreUtils, Method::Signatures::Simple,
    mro, namespace::sweep, Object::Tap, Path::Class, POSIX, Scalar::Util,
    Syntax::Feature::Maybe, Syntax::Feature::Perform, Syntax::Feature::Ql,
    Syntax::Feature::Qwa, true Try::Tiny, utf8::all.

AUTHOR
    Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE
    This software is copyright (c) 2012 by Toby Inkster.

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

DISCLAIMER OF WARRANTIES
    THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

