---
name: "Test2::Tools::Exports"
section: "3p"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["openbsd"]
url: "https://new.carta.tech/Test2::Tools::Exports"
---

# Test2::Tools::Exports(3p)

Tools for validating exporters.

## NAME

Test2::Tools::Exports - Tools for validating exporters.

## DESCRIPTION

These are tools for checking that symbols have been imported into your namespace.

## SYNOPSIS

```
    use Test2::Tools::Exports
    use Data::Dumper;
    imported_ok qw/Dumper/;
    not_imported_ok qw/dumper/;
```

## EXPORTS

All subs are exported by default.

- imported\_ok(@SYMBOLS)

  Check that the specified symbols exist in the current package. This will not find inherited subs. This will only find symbols in the current package's symbol table. This **WILL NOT** confirm that the symbols were defined outside of the package itself.

  ```
      imported_ok( '$scalar', '@array', '%hash', '&sub', 'also_a_sub' );
  ```

  `@SYMBOLS` can contain any number of symbols. Each item in the array must be a string. The string should be the name of a symbol. If a sigil is present then it will search for that specified type, if no sigil is specified it will be used as a sub name.

- not\_imported\_ok(@SYMBOLS)

  Check that the specified symbols do not exist in the current package. This will not find inherited subs. This will only look at symbols in the current package's symbol table.

  ```
      not_imported_ok( '$scalar', '@array', '%hash', '&sub', 'also_a_sub' );
  ```

  `@SYMBOLS` can contain any number of symbols. Each item in the array must be a string. The string should be the name of a symbol. If a sigil is present, then it will search for that specified type. If no sigil is specified, it will be used as a sub name.

## CAVEATS

Before Perl 5.10, it is very difficult to distinguish between a package scalar that is undeclared vs declared and undefined. Currently `"imported_ok"` and `"not_imported_ok"` cannot see package scalars declared using `"our $var"` unless the variable has been assigned a defined value.

This will pass on recent perls, but fail on perls older than 5.10:

```
    use Test2::Tools::Exports;
    our $foo;
    # Fails on perl onlder than 5.10
    imported_ok(qw/$foo/);
```

If `$foo` is imported from another module, or imported using `"use vars qw/$foo/;"` then it will work on all supported perl versions.

```
    use Test2::Tools::Exports;
    use vars qw/$foo/;
    use Some::Module qw/$bar/;
    # Always works
    imported_ok(qw/$foo $bar/);
```

## SOURCE

The source code repository for Test2-Suite can be found at *https://github.com/Test-More/test-more/*.

## MAINTAINERS

- Chad Granum \<exodist@cpan.org\>

  ## AUTHORS

- Chad Granum \<exodist@cpan.org\>

  ## COPYRIGHT

Copyright Chad Granum \<exodist@cpan.org\>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See *http://dev.perl.org/licenses/*
