#! /usr/bin/perl use strict; use Switch 'Perl6'; use Carp; sub enum { my @enum = split /,/, $_[0]; my $i = 0; for (@enum ) { given ($_) { when m/([A-Z]+\d*)(?:\s*=\s*(\d)+)?/i { m/([A-Z]+\d*)(?:\s*=\s*(\d)+)?/i; no strict; $i = $2 if defined $2; eval "sub $1() { $i }"; $i++; } else { croak qq(bad enum member syntax: "$_") } } } } enum "INFIX, PREFIX=4, SUFFIX" ; print INFIX(), ":", PREFIX(), ":", SUFFIX(), "\n";