# Exporter::Tiny::Manual::QuickStart - perldoc - [phpMan]

## NAME
    [Exporter::Tiny::Manual::QuickStart](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny%3A%3AManual%3A%3AQuickStart/markdown) - the quickest way to get up and running with [Exporter::Tiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny/markdown)

## SYNOPSIS
       package MyUtils;

       use [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) qw( frobnicate );

       sub frobnicate {
          ...;   # your code here
       }

       1;

    Now people can use your module like this:

       use MyUtils "frobnicate";

       [frobnicate(42)](https://www.chedong.com/phpMan.php/man/frobnicate/42/markdown);

    Or like this:

       use MyUtils "frobnicate" => { -as => "frob" };

       [frob(42)](https://www.chedong.com/phpMan.php/man/frob/42/markdown);

## DESCRIPTION
    See the synopsis. Yes, it's that simple.

### Next steps
   Default exports
    Note that the module in the synopsis doesn't export anything by default. If people load
    "MyUtils" like this:

       use MyUtils;

    Then they haven't imported any functions. You can specify a default set of functions to be
    exported like this:

       package MyUtils;

       use [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) qw( frobnicate );

       our @EXPORT = qw( frobnicate );

       sub frobnicate { ... }

       1;

    Or, if you want to be a superstar rock god:

       package MyUtils;

       use [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) our @EXPORT = qw( frobnicate );

       sub frobnicate { ... }

       1;

   Tags
    You can provide tags for people to use:

       package MyUtils;

       use [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) qw( frobnicate red green blue );

       our %EXPORT_TAGS = (
          utils   => [qw/ frobnicate /],
          colours => [qw/ red green blue /],
       );

       sub frobnicate { ... }
       sub red        { ... }
       sub green      { ... }
       sub blue       { ... }

       1;

    And people can now import your functions like this:

       use MyUtils ":colours";

    Or this:

       use MyUtils "-colours";

    Or take advantage of the fact that Perl magically quotes barewords preceded by a hyphen:

       use MyUtils -colours;

    Two tags are automatically defined for you: "-default" (which is just the same as @EXPORT) and
    "-all" (which is the union of @EXPORT and @EXPORT_OK). If you don't like them, then you can
    override them:

       our %EXPORT_TAGS = (
          default => \@some_other_stuff,
          all     => \@more_stuff,
       );

   Generators
    Exporting normally just works by copying a sub from your package into your caller's package. But
    sometimes it's useful instead to generate a *custom* sub to insert into your caller's package.
    This is pretty easy to do.

       package MyUtils;

       use [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) qw( frobnicate );

       sub _generate_frobnicate {
          my ( $me, $name, $args, $globals ) = @_;
          my $caller = $globals->{into};

          return sub {
              ...;  # your code here
          };
       }

       1;

    The parameter $me here is a string containing the package name which is being imported from;
    $caller is the destination package; $name is the name of the sub (in this case "frobnicate");
    and $args is a custom argument for this function. (By convention, $args is normally a hashref.)

       # The hashref { foo => 42 } is $args above.
       #
       use MyUtils "frobnicate" => { foo => 42 };

### Avoiding [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown)
    [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) is a tiny shim around [Exporter::Tiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny/markdown). It should mostly do what you want, but you
    may sometimes prefer to use [Exporter::Tiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny/markdown) directly.

    The example in the synopsis could have been written as:

       package MyUtils;

       use parent "[Exporter::Tiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny/markdown)";
       our @EXPORT_OK = qw( frobnicate );

       sub frobnicate {
          ...;   # your code here
       }

       1;

    What [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) does is mostly just to set @EXPORT_OK for you and set up inheritance from
    the base class ([Exporter::Tiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny/markdown)).

    [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown) also sets $INC{'MyUtils.pm'} for you, which in usually makes little difference,
    but is useful in some edge cases.

## SEE ALSO
    <<https://exportertiny.github.io/>>.

    [Exporter::Shiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3AShiny/markdown), [Exporter::Tiny](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny/markdown).

    For more advanced information, see [Exporter::Tiny::Manual::Exporting](https://www.chedong.com/phpMan.php/perldoc/Exporter%3A%3ATiny%3A%3AManual%3A%3AExporting/markdown).

## AUTHOR
    Toby Inkster <<tobyink@cpan.org>>.

## COPYRIGHT AND LICENCE
    This software is copyright (c) 2013-2014, 2017, 2022-2023 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.

