Defines a set of symbolic constants with ordered numeric values ala C enum types. What are they good for? Typical uses would be for giving mnemonic names to indexes of arrays. Such arrays might be a list of months, days, or a return value index from a function such as localtime(): use enum qw( :Months_=0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec :Days_=0 Sun Mon Tue Wed Thu Fri Sat :LC_=0 Sec Min Hour MDay Mon Year WDay YDay Isdst ); if ((localtime)[LC_Mon] == Months_Jan) { print "It's January!\n"; } if ((localtime)[LC_WDay] == Days_Fri) { print "It's Friday!\n"; } Another useful use of enum array index names is when using an array ref instead of a hash ref for building objects: package My::Class; use strict; use enum qw(Field Names You Want To Use); sub new { my $class = shift; my $self = []; $self->[Field] = 'value'; # Field is '0' $self->[Names] = 'value'; # Names is '1' $self->[You] = 'value'; # etc... $self->[Want] = 'value'; $self->[To] = ['some', 'list']; $self->[Use] = 'value'; return bless $self, $class; } This has a couple of advantages over using a hash ref and keys: