【问题标题】:How can I assign a boolean condition result to a scalar variable in perl?如何将布尔条件结果分配给 perl 中的标量变量?
【发布时间】:2013-06-24 03:03:52
【问题描述】:

我正在执行以下操作,但无法正常工作:

    my $enabled = $hash && 
                  $hash->{'key'} && 
                  $hash->{'key'}->{'enabled'} && 
                  $hash->{'key'}->{'active'};

这是将布尔值分配给标量变量的可接受方式吗? 我的代码以奇怪的方式行为不端,事实上,我相信这是因为这个任务。我已经验证了所有这些键都存在单独的值并设置为一个值。

附:对不起,我是菜鸟!我用谷歌搜索了大约 10 分钟,但在任何地方都找不到答案。

【问题讨论】:

    标签: perl hash boolean conditional-statements scalar


    【解决方案1】:

    &&||andor 等 Perl 布尔运算符不返回布尔值,它们返回其中一个参数的值:

    say 2 && 3;
    

    输出3

    您可以使用双重否定技巧将其强制为布尔值:

    say !!(2 && 3);
    # or
    say not not 2 && 3;
    

    输出1

    【讨论】:

    • 但不是 3 被认为是真的,因为我在某处读到了数字意义上的 0 == false 而其余的 > 0 等于 true。双重否定技巧只对风格有用吗?
    • @Grimm 是的,3 是一个真实值。但是,如果所有其他谓词都为真,Squawk 的代码将分配 $hash->{key}->{active} 的值。这可能是他的问题的根源,例如如果它被打印出来,连接或用于进一步计算。例如。字符串为真,但通常数字为零。如果双重否定解决了它,问题就在这里。 (注意:所有数字!= 0 都是正确的,包括否定的)
    • 非常感谢! :) 只是为了澄清一下,如果 $hash->{'key'} 存在并且不是 perl false 值之一,它将返回真实的东西,而如果它不存在,或者如果它存在并且是其中之一perl false 值它将返回 false 上面的表达式将返回最后评估的值,出于意图和目的,它服务于 && 和 || 的功能以正确的方式。那是对的吗?再次感谢!
    • @Squawk Jup,我想你明白了。如果&&-sequence 中的任何谓词为假,您将分配该值(无论是零、空字符串、undef 还是重载对象)。如果哈希条目不存在,您将获得undef 值。如果所有其他部分都为真,您将分配最后一个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多