perl简单的效率和可读性

Mar*_*ark 3 perl performance

我对perl的效率和可读性有疑问

我有一个变量可以采用几个值之一(5-6).有时我想检查这是否是一个特定的值,有时我想检查它是否是几个选择之一.我在我的代码中(在不同的函数中)在很多地方做出这样的决定,我想尽可能"紧凑".

例如,说

my $mode; # can be any of qw(one two three four five six)
if ($mode eq 'one') {
    #do code
}

if ($mode eq 'one' or $mode eq 'two' or $mode eq 'three') {
    #do more code
}
Run Code Online (Sandbox Code Playgroud)

这当然不是我真正的代码,并且使用有意义的变量名称,我的if语句变得非常长并且包含在几行上.

任何帮助表示赞赏!

amo*_*mon 7

List::MoreUtils模块具有该any功能,就像一个短路grep:

use List::MoreUtils qw/any/;

say "correct mode" if any { $_ eq $mode } qw/one two three/;
Run Code Online (Sandbox Code Playgroud)

也就是说,你仍然可以使用grep,但是它总是测试所有元素,而any在第一个匹配元素之后中止:

say "correct mode" if grep { $_ eq $mode } qw/one two three/;
Run Code Online (Sandbox Code Playgroud)