The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

No::Worries::Export - symbol exporting without worries

SYNOPSIS

  use No::Worries::Export qw(export_control);

  sub foo () { ... }

  our $bar = 42;

  sub import : method {
      my($pkg, %exported);
      $pkg = shift(@_);
      grep($exported{$_}++, qw(foo $bar));
      export_control(scalar(caller()), $pkg, \%exported, @_);
  }

DESCRIPTION

This module eases symbol exporting by providing a simple yet powerful alternative to the Exporter module.

The symbols that can be imported are defined in a hash (the third argument of export_control()), the key being the symbol name and the value being:

  • a scalar: indicating a normal symbol

  • a code reference: to be called at import time

The normal symbols can be functions (such as foo), scalars (<$foo>), arrays (<@foo>) or hashes (<%foo>).

All the normal symbols can be imported at once by using an asterisk in the import code:

  use Foo qw(*);

Alternatively, a regular expression can be given to filter what to import:

  # import "foo" and all the normal symbols starting with "bar"
  use Foo qw(foo /^bar/);

The special symbols can be used to execute any code. For instance:

  # exporting module
  our $backend = "stdout";
  sub import : method {
      my($pkg, %exported);
      $pkg = shift(@_);
      $exported{syslog} = sub { $backend = "syslog" };
      export_control(scalar(caller()), $pkg, \%exported, @_);
  }

  # importing code
  use Foo qw(syslog);

Finally, anything looking like a number will trigger a version check:

  use Foo qw(1.2);
  # will trigger
  Foo->VERSION(1.2);

See UNIVERSAL for more information on the VERSION() mthod.

FUNCTIONS

This module provides the following function (not exported by default):

export_control(CALLERPKG, PKG, EXPORT, NAMES...)

control the symbols exported by the module; this should be called from an import method

SEE ALSO

Exporter, No::Worries.

AUTHOR

Lionel Cons http://cern.ch/lionel.cons

Copyright (C) CERN 2012-2019