Perl语法和可读性 - 在数组引用中查找元素

Jer*_*emy 2 arrays perl reference

这个问题涉及Perl的可读性和良好实践.我做了一些检查:

  • 如果我有变量$ array_ref,我只需要知道该数组是否至少有一个元素等于文本'match'.$ array_ref可能是未定义的,或者如果定义了$ array_ref,那么它引用的数组是空的(甚至是未定义的?这可能吗?)

  • 我检查标量是否等于1

  • 我检查另一个标量是否等于'是'

这是我正在使用的当前代码:

 my $is_compatible = $array_ref and defined grep $_ eq 'match', @{$array_ref}
                     and $my_num = 1 and $my_text eq 'yes'.
Run Code Online (Sandbox Code Playgroud)

这可以修复到更容易更改和可读吗?此外,它是否适合$ array_ref值的所有可能用例?

ike*_*ami 7

从不使用开始and.你想坚持使用它提供的视觉提示的符号运算符.命名为运营商通常发现其中术语被发现,并且andor通常用于流控制.这两个提示都是错误的,所以你不想给出那些提示.

以下安排非常容易阅读.证据是你使用过的=地方变得非常明显==.

my $is_compatible = ( $array && grep $_ eq 'match', @$array )
    && $my_num == 1
    && $my_text eq 'yes';
Run Code Online (Sandbox Code Playgroud)

如果你想使用sub,以下就足够了.

sub is_compatible {
   my ($array, $my_num, $my_text) = @_;
   return 0 if !$array || !grep $_ eq 'match', @$array;
   return 0 if $my_num != 1;
   return 0 if $my_text ne 'yes';
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

这两种方法都使类似的东西看起来相似,不同的东西看起来不同,从而实现了极其高效的代码扫