NAME
    thanks - inline packages easily

SYNOPSIS
            BEGIN {
                    package My::Package;
                    no thanks;
                    # everything else goes here
            };
        
            use My::Package;  # No error message about missing
                              # file "My/Package.pm".
                              #

    Or:

            BEGIN {
                    package My::Package;
                    # everything else goes here
            };
        
            no thanks qw( My::Package Another::Package Yet::Another::Package );
        
            use My::Package;  # No error message about missing
                              # file "My/Package.pm".
                              #

ELEVATOR PITCH
    Defining multiple Perl packages in the same file can be fraught with
    difficulty. `no thanks` makes it a bit easier. To define a package just
    do...

            BEGIN {
                    package My::Package;
                    no thanks;
                    # everything else goes here
            };

    Then everything should more or less work exactly if My::Package had been a
    package defined in an external file and loaded like:

            use My::Package ();

    (The exception being that the inlined My::Package can see file-scoped
    lexicals.)

    Why define multiple packages in the same file? Because often namespacing
    concerns and code organisation concerns don't align. For example, you have
    many small packages which it is important don't share namespaces, but you
    want to be able to edit them all in the same window/tab of your editor.

DESCRIPTION
    This module asks Perl politely not to load a module you don't want
    loading. It's just a polite request; we're not forcing Perl to do anything
    it doesn't want to. And if the module is already loaded, then we won't try
    to unload it or anything like that.

    Specifically, Perl's `use Module::Name` syntax does two things. It reads,
    compiles and executes `Module/Name.pm`, and calls the class method
    `Module::Name->import`. This module is designed to prevent the first thing
    happening, not the second thing.

    How does it work? Perl keeps a record of what modules have already been
    loaded in the %INC global hash, to avoid reloading them. This module just
    adds an entry to that hash to trick Perl into thinking that a module has
    already been loaded.

    `thanks` is a deliberately light-weight module. It has no dependencies
    (not even strict or warnings) and is believed to work in any release of
    Perl 5. (The installation and testing scripts have more dependencies, but
    if push comes to shove, you can manually copy thanks.pm to an appropriate
    location.)

  Methods
    `unimport`
                no thanks @LIST;

        If @LIST is empty, then the caller package is assumed.

  Use Case 1: Multiple Packages in the Same File
    Perl's `use` keyword muddies the distinction between packages (which are
    just namespaces) and modules (which are just files). Sometimes you wish to
    define two packages (say `My::Package` and `My::Package::Helper`) in the
    same file (say `My/Package.pm`). If anybody tries to load
    `My::Package::Helper` with `use`, then they'll get an error message. If
    `My/Package.pm` includes:

            no thanks 'My::Package::Helper';

    then this will prevent `use My::Package::Helper` from throwing an error
    message, provided `My/Package.pm` is already loaded.

  Use Case 2: You Really Want to Prevent a Module from Loading
    It's quite a messy thing to do, but if you really need to silently prevent
    a module from being loaded, then `no thanks` will do the trick. Just make
    sure you do it early.

    This is almost always a bad idea.

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

SEE ALSO
    again, Module::Reload, Class::Unload.

AUTHOR
    Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE
    This software is copyright (c) 2012-2013 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.