在 Perl 中的 push 中使用条件运算符

Sab*_*dan 2 perl conditional-operator

我是 Perl 开发的新手,我想检查是否允许在 push 语句中使用条件运算符。像这样的东西

push(@myMap, {
    key1 => value1,
    key2 => value2,
    (condition)?{
        key3 => value3,
    }:(),
    key4 => value4
});
Run Code Online (Sandbox Code Playgroud)

基本上我只想根据条件向地图添加一个值

sim*_*que 6

是的,但你的代码是错误的。

push(@myMap, {
    key1 => value1,
    key2 => value2,

    (condition) ? 
      {                   ### these brackets are wrong
        key3 => value3,
      }                   ###
   :(),

    key4 => value4
});
Run Code Online (Sandbox Code Playgroud)

如果条件为真,则您正在创建具有奇数个元素的数据结构。它将包含单个哈希引用作为值之一,因此您不再拥有键/值对,并且它可能会抱怨。

它会尝试做你想做的事,基本上把那个哈希引用转换成它的字符串表示,然后key4用作值,让你留下value4undef作为最后一对。

使固定:

push(@myMap, {
    key1 => value1,
    key2 => value2,
    (condition) ? ( key3 => value3 ) : (),
    key4 => value4
});
Run Code Online (Sandbox Code Playgroud)

  • @simbabque,我不是它的忠实粉丝,但它是一个众所周知的习语。如果该模式可以被识别,那么它实际上是可读的,而这个模式很容易识别。如果我在 `grep` 或 `if` 附近看到 `!$seen{$_}++`,我就立刻知道我们正在做一些重复的事情。这并不是因为我花时间解析这个表达式;而是因为我花了很多时间来解析这个表达式。这是一种熟悉的模式。 (2认同)