No, there isn’t a built-in enum construct. Perl doesn’t do a lot of strict typing, so I think there’s actually little need for one.
In my opinion, the Readonly
approach you used is solid.
There’s also the more traditional constant
pragma.
use constant {
HOME => 'Home',
WORK => 'Work',
MOBILE => 'Mobile',
};
$phone_number->{type} = HOME;
Behind the scenes, it sets up a function for each constant that returns the value, like so.
sub HOME () { 'Home' }
I’d stick with Readonly
unless you want to take advantage of that property, for example:
package Phone::Type;
use constant {
HOME => 'Home',
#...
};
package main;
print Phone::Type->HOME, "\n";