给出枚举
enum NATO (:alpha<A>, :bravo<B>, :charlie<C>, :delta<D>);
可以通过直接键入名称之一或将值之一传递给枚举对象来轻松设置变量:
my $a = alpha;
my $b = NATO('B');
say $a; # ↪︎ alpha
say $b; # ↪︎ bravo
say $a.value; # ↪︎ A
say $b.value; # ↪︎ B
除了使用EVAL
并给定对应于枚举之一的Str
之外,我如何才能创建$c
作为等于charlie
的枚举值?
my $x = 'charlie';
my $c = ...
答案 0 :(得分:11)
您可以将其视为哈希:
my $c = NATO::{$x};
答案 1 :(得分:7)
您可以使用间接名称查找:
enum NATO (:alpha<A>, :bravo<B>, :charlie<C>);
my $x = 'charlie';
my $c = ::($x);
say $c.value;