package Squirrel;
use strict;
use warnings;

sub _choose_backend {
    if ( $INC{""} ) {
        return {
            backend  => 'Moose',
            import   => \&Moose::import,
            unimport => \&Moose::unimport,
    } else {
        require Mouse;
        return {
            backend  => 'Mouse',
            import   => \&Mouse::import,
            unimport => \&Mouse::unimport,

my %pkgs;

sub _handlers {
    my $class = shift;

    my $caller = caller(1);

    $pkgs{$caller} ||= $class->_choose_backend;

sub import {
    require Carp;
    Carp::carp("Squirrel is deprecated. Please use Any::Moose instead. It fixes a number of design problems that Squirrel has.");

    my $handlers = shift->_handlers;
    unshift @_, $handlers->{backend};
    goto &{$handlers->{import}};

sub unimport {
    my $handlers = shift->_handlers;
    unshift @_, $handlers->{backend};
    goto &{$handlers->{unimport}};




=head1 NAME

Squirrel - Use Mouse, unless Moose is already loaded. (DEPRECATED)


    use Squirrel;

    has goggles => (
        is => "rw", 


C<Squirrel> is deprecated. C<Any::Moose> provides the same functionality,
but better. :)


L<Moose> and L<Squirrel> are THE BEST FRIENDS, but if L<Moose> isn't there
L<Squirrel> will hang out with L<Mouse> as well.

When your own code doesn't actually care whether or not you use L<Moose> or
L<Mouse> you can use either, and let your users decide for you.

This lets you run with minimal dependencies and have a faster startup, but if
L<Moose> is already in use you get all the benefits of using that
(transformability, introspection, more opportunities for code reuse, etc).

=head1 SEE ALSO