slots

 view release on metacpan or  search on metacpan

lib/slots.pm  view on Meta::CPAN

package slots;
# ABSTRACT: A simple pragma for managing class slots.

use strict;
use warnings;

use MOP ();

our $VERSION   = '0.03';
our $AUTHORITY = 'cpan:STEVAN';

sub import {
    shift;
    my $pkg   = caller(0);
    my $meta  = MOP::Util::get_meta( $pkg );
    my %slots = @_;

    $meta->add_slot( $_, $slots{ $_ } ) for keys %slots;

    MOP::Util::defer_until_UNITCHECK(sub {
        MOP::Util::inherit_slots( MOP::Util::get_meta( $pkg ) )
    });
}

1;

__END__

=pod

=head1 NAME

slots - A simple pragma for managing class slots.

=head1 VERSION

version 0.03

=head1 SYNOPSIS

    package Point {
        use strict;
        use warnings;

        use parent 'UNIVERSAL::Object';
        use slots (
            x => sub { 0 },
            y => sub { 0 },
        );

        sub clear {
            my ($self) = @_;
            $self->{x} = 0;
            $self->{y} = 0;
        }
    }

    package Point3D {
        use strict;
        use warnings;

        use parent 'Point';
        use slots (
            z => sub { 0 },
        );

        sub clear {
            my ($self) = @_;
            $self->next::method;
            $self->{z} = 0;
        }
    }

=head1 DESCRIPTION

This is a very simple pragma which takes a set of key/value
arguments and assigns it to the C<%HAS> package variable of
the calling class.

This module will also detect superclasses and insure that
slots are inherited correctly, this wil occur during the
next available UNITCHECK phase.

=head1 AUTHOR

Stevan Little <stevan@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017, 2018 by Stevan Little.

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

=cut



( run in 0.731 second using v1.01-cache-2.11-cpan-5a3173703d6 )