Exporter::Tiny::Manual::QuickStart(3) User Contributed Perl Documentation Exporter::Tiny::Manual::QuickStart(3)

# [NAME](#NAME)

Exporter::Tiny::Manual::QuickStart - the quickest way to get up and running with Exporter::Tiny

# [SYNOPSIS](#SYNOPSIS)

```
   package MyUtils;
   
   use Exporter::Shiny qw( frobnicate );
   
   sub frobnicate {
      ...;   # your code here
   }
   
   1;
```

Now people can use your module like this:

```
   use MyUtils "frobnicate";
   
   frobnicate(42);
```

Or like this:

```
   use MyUtils "frobnicate" => { -as => "frob" };
   
   frob(42);
```

# [DESCRIPTION](#DESCRIPTION)

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

## [Next steps](#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 qw( frobnicate );
   
   our @EXPORT = qw( frobnicate );
   
   sub frobnicate { ... }
   
   1;
```

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

```
   package MyUtils;
   
   use Exporter::Shiny our @EXPORT = qw( frobnicate );
   
   sub frobnicate { ... }
   
   1;
```

*Tags*

You can provide tags for people to use:

```
   package MyUtils;
   
   use Exporter::Shiny 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 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](#Avoiding_Exporter::Shiny)

Exporter::Shiny is a tiny shim around Exporter::Tiny. It should mostly do what you want, but you may sometimes prefer to use Exporter::Tiny directly.

The example in the synopsis could have been written as:

```
   package MyUtils;
   
   use parent "Exporter::Tiny";
   our @EXPORT_OK = qw( frobnicate );
   
   sub frobnicate {
      ...;   # your code here
   }
   
   1;
```

What Exporter::Shiny does is mostly just to set @EXPORT\_OK for you and set up inheritance from the base class (Exporter::Tiny).

Exporter::Shiny also sets $INC{'MyUtils.pm'} for you, which in usually makes little difference, but is useful in some edge cases.

# [SEE ALSO](#SEE_ALSO)

&lt;https://exportertiny.github.io/&gt;.

Exporter::Shiny, Exporter::Tiny.

For more advanced information, see Exporter::Tiny::Manual::Exporting.

# [AUTHOR](#AUTHOR)

Toby Inkster &lt;tobyink@cpan.org&gt;.

# [COPYRIGHT AND LICENCE](#COPYRIGHT_AND_LICENCE)

This software is copyright (c) 2013-2014, 2017, 2022-2025 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](#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.

2026-10-26 perl v5.44.0

---

Document: Exporter::Tiny::Manual::QuickStart(3pm) from perl-exporter-tiny 1.006003-r4 (Chainguard OS)
Source: https://github.com/tobyink/p5-exporter-tiny
