在布尔上下文中,未定义的只读变量评估为true

亨特·麦克米伦(Hunter McMillen)

在我们的代码库中,我们经常使用此构造来处理程序的选项:

Readonly my $ARGS => Getopt::Declare->new(
   join( "\n",
      '[strict]',
      "--option1 <some-option-description> [required]",
   )
) or exit(1);

问题是,当违反严格性Getopt::Declare->new(...),它将返回undef,通常可以这样undef做,只是将其存储在Readonly变量中,该变量在布尔上下文中评估为true

  1. 一个明显的解决方案是删除Readonly和代码将按预期运行;但是我真的不喜欢这个解决方案,因为改变它可以$ARGS被修改。

    my $ARGS => Getopt::Declare->new(
       join( "\n",
          '[strict]',
          "--option1 <some-option-description> [required]",
       )
    ) or exit(1);
    
  2. 另一个解决方案是将Getopt::Declare->new(...) or exit(1)in包裹起来,以便在分配给Readonly变量之前对其进行求值。

    Readonly my $ARGS => (
       Getopt::Declare->new(
          join( "\n",
             '[strict]',
             "--option1 <some-option-description> [required]",
          )
       ) or exit(1);
    )
    
  3. 我猜一个替代方案是使用或的更高优先级版本||,该版本比绑定更强,=>但我不确定它是否可读。

    Readonly my $ARGS => Getopt::Declare->new(
       join( "\n",
          '[strict]',
          "--option1 <some-option-description> [required]",
       )
    ) || exit(1);
    
思南·乌努尔
Readonly my $ARGS => Getopt::Declare->new(
# ...
);
$ARGS or exit(1);

也应该工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Clang抱怨在未评估的上下文中未定义的constexpr函数

'this'在回调上下文中未定义

在上下文中评估变量

应该将Exception :: Class对象在布尔上下文中评估为false

如何制作上下文变量并修复“未定义名称‘上下文’的错误。”

反应上下文-“ this”未定义

ReferenceError:上下文未定义

上下文未定义

反应上下文未定义

上下文返回未定义

在 C++ 中的布尔上下文中使用户定义的类型为真/假

无法从上下文中解构对象的属性,因为它是未定义的

无法读取未定义的属性...(上下文中的属性/值)

在全局上下文中使用类方法具有未定义的“ this”

UB上下文中的“可观察到的行为”“未定义行为”

TypeError:无法读取VueJS上下文中未定义的属性“替换”

当从另一个上下文中调用方法时,“ this”是未定义的

为什么Perl的严格模式允许您在此foreach上下文中而不是在赋值上下文中取消引用具有未定义值的变量?

变量定义上下文中的INTENT(IN)虚拟参数

JS:“这个”上下文在promise链中时始终显示为未定义

无法在静态上下文中使用它,并且对于流程类型未定义myPid()

在依赖于 URL 的上下文中创建初始状态,在 NextJS 中未定义窗口

可以在constexpr上下文中使用使用导致未指定(未定义!)行为的指针进行表达吗?

构造函数中未定义上下文 - 反应

功能中未定义的名称“上下文”

反应上下文-'contextType'未定义

反应上下文状态属性未定义

Flutter Navigation未定义的“上下文”

未定义Spark上下文'sc'