---
name: "Perl6::Export"
section: "3pm"
platform: "linux"
package: "libperl6-export-perl"
version: "0.009-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Perl6::Export"
---

# Perl6::Export(3pm)

Implements the Perl 6 'is export(...)' trait

## NAME

Perl6::Export - Implements the Perl 6 'is export(...)' trait

## SYNOPSIS

```
    # Perl 5 code...
    package Some::Module;
    use Perl6::Export;
    # Export &foo by default, when explicitly requested,
    # or when the ':ALL' export set is requested...
    sub foo is export(:DEFAULT) {
        print "phooo!";
    }
    # Export &bar by default, when explicitly requested,
    # or when the ':bees', ':pubs', or ':ALL' export set is requested...
    # the parens after 'is export' are like the parens of a qw(...)
    sub bar is export(:DEFAULT :bees :pubs) {
        print "baaa!";
    }
    # Export &baz when explicitly requested
    # or when the ':bees' or ':ALL' export set is requested...
    sub baz is export(:bees) {
        print "baassss!";
    }
    # Always export &qux
    # (no matter what else is explicitly or implicitly requested)
    sub qux is export(:MANDATORY) {
        print "quuuuuuuuux!";
    }
    IMPORT {
        # This block is called when the module is used (as usual),
        # but it is called after any export requests have been handled.
        # Those requests will have been stripped from its @_ argument list
    }
```

## DESCRIPTION

Implements what I hope the Perl 6 symbol export mechanism might look like.

It's very straightforward:

- •

  If you want a subroutine to be capable of being exported (when explicitly requested in the `"use"` arguments), you mark it with the `"is export"` trait.

- •

  If you want a subroutine to be automatically exported when the module is used (without specific overriding arguments), you mark it with the `"is export(:DEFAULT)"` trait.

- •

  If you want a subroutine to be automatically exported when the module is used (even if the user specifies overriding arguments), you mark it with the `"is export(:MANDATORY)"` trait.

- •

  If the subroutine should also be exported when particular export groups are requested, you add the names of those export groups to the trait's argument list.

That's it.

### "IMPORT" blocks

Perl 6 replaces the `"import"` subroutine with an `"IMPORT"` block. It's analogous to a `"BEGIN"` or `"END"` block, except that it's executed every time the corresponding module is `"use"`'d.

Perl6::Export honours either the Perl5-ish:

```
    sub import {...}
```

or the equivalent Perl6-ish:

```
    IMPORT {...}
```

In either case the subroutine/block is passed the argument list that was specified on the `"use"` line that loaded the corresponding module. However, any export specifications (names of subroutines or tagsets to be exported) will have already been removed from that argument list before `"import"`/`"IMPORT"` receives it.

## WARNING

The syntax and semantics of Perl 6 is still being finalized and consequently is at any time subject to change. That means the same caveat applies to this module.

## DEPENDENCIES

Requires Filter::Simple

## AUTHOR

Damian Conway (damian@conway.org)

## BUGS AND IRRITATIONS

Does not yet handle the export of variables.  The author personally believes this is a feature, rather than a bug.

Comments, suggestions, and patches welcome.

## COPYRIGHT

```
 Copyright (c) 2003, Damian Conway. All Rights Reserved.
 This module is free software. It may be used, redistributed
    and/or modified under the same terms as Perl itself.
```
