Я бы посоветовал вам использовать Readonly (как предложено в указанном вопросе), а не константу. Я бы предложил один из двух возможных подходов (в зависимости от того, используете ли вы Perl 5.10 или 5.8).
Изначально тот же код:
use strict;
use warnings;
use Readonly;
Readonly my @phone_types = qw/HOME WORK/;
Perl 5.10:
sub fun
{
my $type = shift;
die "Invalid phone type: $type" unless $type ~~ @phone_types;
# ...
}
Perl 5.8:
sub fun
{
my $type = shift;
die "Invalid phone type: $type" unless grep { $_ eq $type} @phone_types;
# ...
}
В CPAN есть модуль, который позволит вам иметь большой контроль над типами и значениями аргументов, но я не могу вспомнить его. Возможно, кто-то еще может.