我喜欢将内容从一个演示文稿映射到另一个演示文稿,我正在寻找一种“perl'ish”的方式来实现它。
示例:
"ok" -> 1
"nok" -> 0
else -> -1
我的解决方案很清晰,但不是很优雅。如果有超过 3 个可能的映射(0、1、-1),那就很痛苦了。
my $val = "ok";
if ($val eq "ok")
{
$val = 1;
}
elsif ($val eq "nok")
{
$val = 0;
}
else
{
$val = -1;
}
我可以使用散列,但我仍然需要处理其他部分。
$val = "ok";
my %h = ("ok" => 1, "nok" => 0);
if (defined ($h {$val})
{
$val = $h {$val};
}
else
{
$val = -1;
}
有什么方法可以在一行中完成它但仍然保持可读性??
谢谢!
最佳答案
我认为 exists
可能比 defined
更安全。
my %translate = (ok => 1, nok => 0);
$val = exists $translate{$val} ? $translate{$val} : -1;
但是,如果您可以确定所有哈希值都不会是 undef
,则可以使用“定义或”运算符:
$val = $translate{$val} // -1;
关于Perl:以 "perl' ish"方式进行值映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47833420/