Как я могу создать перечислимый тип в Perl?

Я должен пасовать назад перечисление значений в жемчуге, как я могу сделать это?

получение по запросу от этого потока: Perl имеет перечисляемый тип?

use strict;

use constant {
    HOME   => 'home',
    WORK   => 'work',
    MOBILE => 'mobile',
};

my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";

но разве это не должно возвращать индекс 0? или я понимаю эту несправедливость?

Править:

Таким образом, что-то вроде этого было бы более вероятным для перечислимого типа?

use strict;

use constant {
    HOME   => 0,
    WORK   => 1,
    MOBILE => 2,
};

my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";

РЕДАКТИРОВАНИЕ № 2

Также я хотел бы проверить на выбранной опции, но пасовать назад Word скорее затем Значение. Как у меня может быть лучший из обоих примеров?

@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;
}

5
задан Community 23 May 2017 в 10:34
поделиться

2 ответа

Константа не является каналом (в Perl, или любой язык, которого я знаю)

Нет, потому что здесь вы делаете, это вставляется в символ Таблица Ссылка между ключом Home и литерал Home , это также называется Nawword в Perl Parmance. Таблица символов реализована с хеш, и нет эквивалентности его ключей и порядок их добавления.

В вашем примере вы делаете, это установлено $ perl_number -> {type} = 'home' , а затем печать $ phone_number -> {type} .

2
ответ дан 15 December 2019 в 01:01
поделиться

Если вы можете использовать его, FCKEditor имеет настройки для этого

-121--3519711-

См. документацию :

Entry.objects.all().update(value= not F('value'))
-121--4435258-

Если требуется перечисление, используйте модуль перечисления .

2
ответ дан 15 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: