Perl 过度使用//或必要的

Perl 过度使用//或必要的,perl,Perl,我遇到了以下遗留代码: sub some_func { my $val = $ENV{some_key} // ''; if ( length($val) ) { return $val; } return 0; } 通常我会认为这很复杂,然后重写为: sub some_func { return $ENV{some_key} || 0; } 但是写这篇文章的程序员非常棒。我遗漏了什么吗?原文: 空字符串⇒ 零(作为一个数字) 零字

我遇到了以下遗留代码:

sub some_func {
    my $val = $ENV{some_key} // '';
    if ( length($val) ) {
        return $val;
    }

    return 0;
}
通常我会认为这很复杂,然后重写为:

sub some_func {
    return $ENV{some_key} || 0;
}
但是写这篇文章的程序员非常棒。我遗漏了什么吗?

原文:

  • 空字符串⇒ 零(作为一个数字)
  • 零字符串⇒ 零(作为字符串)
  • 零号⇒ 零(作为一个数字)
  • 未定义⇒ 零(作为一个数字)
其他所有内容都返回$ENV{some_key}


重写:

  • 空字符串⇒ 零(作为一个数字)
  • 零字符串⇒ 零(作为一个数字)
  • 零号⇒ 零(作为一个数字)
  • 未定义⇒ 零(作为一个数字)
其他所有内容都返回$ENV{some_key}



因此,有一个微小的差异并不重要,但在某些情况下确实如此(例如,
encode_json
)。不过,我认为这是无意的差别。

afaict两者之间唯一的区别是当环境变量为“0”时返回的是“0”还是“0”。这真的是原始代码中的
/
,还是应该是
|
。后者更有意义。但是,既然您正在研究ENV变量,我认为空字符串比0更好,所以类似于
return$ENV{some_key}| | | | | | | | | | | | | | | | |可能会更好。@jimtut,
/
非常有意义。它使5.12之前发出的undef警告
length
静音。这是做
my$val=$ENV{some_key}的另一种方式;如果(已定义($val)和长度($val))
。(在第一个代码段中使用
|
只有在它实际上等同于第一个代码段中的
/
的意义上才有意义。)不知何故,我不知道这个逻辑操作!