【问题标题】:Bareword "NUMBER" not allowed while "strict subs" in use使用“strict subs”时不允许使用裸词“NUMBER”
【发布时间】:2019-06-05 04:21:01
【问题描述】:

问题代码:

{
    port_id   => { type => SCALAR },
    ipv4_addr => { type => SCALAR },
    gateway   => { type => SCALAR },
    netmask   => { type => SCALAR },
    vlan_id   => { type => NUMBER, optional => 1 },
}

我使用了'use strict;'在我的 pm 文件中,并基于错误信息“在使用“strict subs”时不允许使用裸字“NUMBER””,我知道我需要为类型添加“”,例如“NUMBER”。但是之前我的代码中没有NUMBER类型,并且我没有为这些类型添加'',并且它没有报告任何错误。 所以我想知道为什么 NUMBER 很特别?

【问题讨论】:

    标签: perl syntax


    【解决方案1】:

    没有use strict 'subs';,没有其他语法含义的标识符被视为在评估时产生的字符串文字。这很容易出错(因为它很容易导致代码在预期做另一件事时做一件事),所以我们都在代码中使用use strict 'subs'; 来消除这个错误功能。

    如果您想创建一个在使用use strict 'subs'; 时产生字符串NUMBERSCALAR 的运算符,则需要使用NUMBERSCALAR 以外的其他内容。正如您所提到的,您可以使用'NUMBER''SCALAR'

    另一种可能性是 NUMBER 应该是常量的名称,但您忘记声明/导入常量。这正是use strict 'subs'; 应该捕获的错误类型。

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 2012-11-11
      • 2013-11-03
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多