Coder Social home page Coder Social logo

perl-data-enum's Introduction

NAME

Data::Enum - immutable enumeration classes

VERSION

version v0.5.0

SYNOPSIS

use Data::Enum;

my $color = Data::Enum->new( qw[ red yellow blue green ] );

my $red = $color->new("red");

$red->is_red;    # "1"
$red->is_yellow; # "0" (false)
$red->is_blue;   # "0" (false)
$red->is_green;  # "0" (false)

say $red;        # outputs "red"

$red eq $color->new("red"); # true

$red eq "red"; # true

DESCRIPTION

This module will create enumerated constant classes with the following properties:

  • Any two classes with the same elements are equivalent.

    The following two classes are the same:

    my $one = Data::Enum->new( qw[ foo bar baz ] );
    my $two = Data::Enum->new( qw[ baz bar foo ] );
  • All class instances are singletons.

    my $one = Data::Enum->new( qw[ foo bar baz ] );
    
    my $a = $one->new("foo")
    my $b = $one->new("foo");
    
    refaddr($a) == refaddr($b); # they are the same thing
  • Methods for checking values are fast.

    $a->is_foo; # constant time
    
    $a eq $b;   # compares refaddr
    
  • Values are immutable (read-only).

This is done by creating a unique internal class name based on the possible values. Each value is actually a subclass of that class, with the appropriate predicate method returning a constant.

METHODS

new

my $class = Data::Enum->new( @values );

This creates a new anonymous class. Values can be instantiated with a constructor:

my $instance = $class->new( $value );

Calling the constructor with an invalid value will throw an exception.

Each instance will have a predicate is_ method for each value.

The values are case sensitive.

Each instance stringifies to its value.

Since v0.3.0 you can change the specify options in the class generator:

my $class = Data::Enum->new( \%options, @values );

The following options are supported:

  • prefix

    Change prefix of the predicate methods to something other than is_. For example,

    my $class = Data::Enum->new( { prefix => "from_" }, "home", "work" );
    my $place = $class->new("work");
    
    $place->from_home;

    This was added in v0.3.0.

  • name

    This assigns a name to the class, so instances can be constructed by name:

    my $class = Data::Enum->new( { name => "Colours" }, "red", "orange", "yellow", "green" );
    
    my $color = Colours->new("yellow");

    This was added in v0.5.0.

values

my @values = $class->values;

Returns a list of valid values, stringified and sorted with duplicates removed.

This was added in v0.2.0.

predicates

my @predicates = $class->predicates;

Returns a list of predicate methods for each value.

A hash of predicates to values is roughly

use List::Util 1.56 'mesh';

my %handlers = mesh [ $class->values ], [ $class->predicates ];

This was added in v0.2.1.

prefix

This returns the prefix.

This was added in v0.3.0.

MATCH

This method adds support for match::simple.

as_string

This stringifies the the object.

This was added in v0.4.0.

CAVEATS

The overheard of creating a new class instance and resolving methods may actually take more time than comparing simple strings. When using this in production code, you may want to benchmark performance.

SUPPORT FOR OLDER PERL VERSIONS

This module requires Perl v5.14 or later.

Future releases may only support Perl versions released in the last ten years.

SEE ALSO

Class::Enum

Object::Enum

MooX::Enumeration

MooseX::Enumeration

Type::Tiny::Enum

SOURCE

The development version is on github at https://github.com/robrwo/perl-Data-Enum and may be cloned from git://github.com/robrwo/perl-Data-Enum.git

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/robrwo/perl-Data-Enum/issues

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.

AUTHOR

Robert Rothenberg [email protected]

COPYRIGHT AND LICENSE

This software is Copyright (c) 2021-2024 by Robert Rothenberg.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)

perl-data-enum's People

Contributors

robrwo avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.