NAME
    Package::CopyFrom - Copy (some) contents from another package

VERSION
    This document describes version 0.001 of Package::CopyFrom (from Perl
    distribution Package-CopyFrom), released on 2020-02-15.

SYNOPSIS
     package My::Package;
     use Package::CopyFrom; # exports copy_from()

     copy_from 'Your::Package';

DESCRIPTION
    This module provides "copy_from" to fill the contents of the specifed
    (source) package into the caller's (target) package, with some options.
    "copy_from" can be used for reuse purpose, as a "poor man"'s
    "non-inheritance" OO: you copy routines (as well as package variables)
    from another "base" package then add/modify some.

FUNCTIONS
  copy_from
    Usage:

     copy_from [ \%opts, ] $source_package

    Load module $source_package if not already loaded (unless the "load"
    option is set to false), then copy the contents of package into the
    caller's package. Currently only subroutines, scalars, arrays, and
    hashes are copied.

    Options:

    *   overwrite

        Boolean, default false. When this setting is false, if a symbol
        (variable/subroutine) already exists in the target package, it will
        not be overwritten. Setting this option to true will overwrite.

        See "GOTCHAS".

    *   load

        Boolean, default true. If set to false, no attempt to load module
        named $source_package is made.

    *   skip_sub

        Boolean, default false. Whether to exclude all subs.

    *   skip_scalar

        Boolean. Whether to exclude all scalar variables.

    *   skip_array

        Boolean, default false. Whether to exclude all array variables.

    *   skip_hash

        Boolean, default false. Whether to exclude all hash variables.

    *   exclude

        Arrayref. List of names to exclude.

        Examples:

         exclude => ['@EXPORT', '@EXPORT_OK', '%EXPORT_TAGS', '$VERSION'];

    *   dclone

        Boolean, default false. By default, only shallow copying of arrays
        and hashes are done. If this option is true, Storable's "dclone" is
        used.

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/Package-CopyFrom>.

SOURCE
    Source repository is at
    <https://github.com/perlancar/perl-Package-CopyFrom>.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://rt.cpan.org/Public/Dist/Display.html?Name=Package-CopyFrom>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

GOTCHAS
    During parsing (compile-time), whenever a variable is mentioned (even if
    the corresponding statement never gets executed) it will spring into
    existence. If you do "copy_from" during run-time, you will miss copying
    the mentioned variable unintendedly. Consider this example:

     # in lib/Cwd2.pm
     package Cwd2;
     use Package::CopyFrom;
     copy_from 'Cwd';

     # in main.pl
     require Cwd2;

     say @Cwd2::EXPORT if 0;

     # Cwd2's @EXPORT will not be copied from Cwd's @EXPORT because Cwd2's @EXPORT
     # springs into existence during compile-time due to the above statement.

SEE ALSO
    Package::Rename can also copy packages.

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2020 by perlancar@cpan.org.

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

