Мне нужно передать значение enum в perl, как я могу это сделать?Как создать тип перечисления в Perl?
вытягивать из этого потока: Does Perl have an enumeration type?
use strict;
use constant {
HOME => 'home',
WORK => 'work',
MOBILE => 'mobile',
};
my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";
но не должен этот показатель возврата 0? или я понимаю это неправильно?
EDIT:
Так что-то вроде этого будет более предсказуем для перечислимого типа?
use strict;
use constant {
HOME => 0,
WORK => 1,
MOBILE => 2,
};
my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";
EDIT # 2
Кроме того, я хотел бы проверить на выбранной опции, но передать обратно слово, а затем значение. Как я могу получить лучшее из обоих примеров?
@VALUES = (undef, "home", "work", "mobile");
sub setValue {
if (@_ == 1) {
# we're being set
my $var = shift;
# validate the argument
my $success = _validate_constant($var, \@VALUES);
if ($success == 1) {
print "Yeah\n";
} else {
die "You must set a value to one of the following: " . join(", ", @VALUES) . "\n";
}
}
}
sub _validate_constant {
# first argument is constant
my $var = shift();
# second argument is reference to array
my @opts = @{ shift() };
my $success = 0;
foreach my $opt (@opts) {
# return true
return 1 if (defined($var) && defined($opt) && $var eq $opt);
}
# return false
return 0;
}
Что вы подразумеваете под * index 0 *? –
Вы прочитали принятый ответ на вопрос, который вы связали? В частности, часть сказанная, что Perl делает * не * имеет тип перечисления? Если да, откуда вы ожидаете «индекс 0»? – friedo
@friedo Я согласен с вами, я просто хочу убедиться, что понимаю это право. Мне нужно иметь возможность установить HOME, но вернуть 0. Будет ли просто менять значение на 0? См. Редактировать –