首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在“are”行中允许使用引号连字符选项,而不使用粗体逗号,并且严格要求?

为什么在“are”行中允许使用引号连字符选项,而不使用粗体逗号,并且严格要求?
EN

Stack Overflow用户
提问于 2018-12-10 14:09:00
回答 2查看 147关注 0票数 5

为什么下面的use行是合法的Perl语法?(改编自用于父级的过氧化物酶;在Cygwin上的Perl 5.26.2 x64上进行测试。)

代码语言:javascript
复制
package MyHash;
use strict;
use Tie::Hash;
use parent -norequire, "Tie::StdHash";
       #   ^^^^^^^^^^ A bareword with nothing to protect it!

-MO=Deparse下,use行变成

代码语言:javascript
复制
use parent ('-norequire', 'Tie::StdHash');

但我从文档上看不出对-norequire的引用是从哪里来的。

  • 如果use strict没有生效,我会理解的。裸单词norequire成为弦 "norequire"一元减去将将该字符串转换为"-bareword",而结果字符串将进入use导入列表。例如: 包MyHash;使用Tie::Hash;使用父-norequire,"Tie::StdHash";
  • 同样的,如果有一个很胖的逗号,我会理解的。-foo => bar变成了"-foo", bar,因为=> "foo",然后一元减去它的魔力再次发挥作用。例如: 包MyHash;使用严格;使用Tie::Hash;使用父-norequire => "Tie::StdHash";

这两个示例对use行产生相同的偏差。但是,两者都引用了原来的示例。我遗漏了什么使最初的示例(使用strict,没有=>)合法?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 14:40:49

您已经引用了perldoc perlop,但它在这里是相关的。

如果操作数是数字,则一元-执行算术否定,包括任何看起来像数字的字符串。如果操作数是标识符,则返回由与标识符连接的减号组成的字符串。..。这些规则的一个效果是,-bareword等同于字符串"-bareword"

一元减号运算符的这种行为在应用strict检查之前应用于裸字。因此,一元减号是一种在严格模式下工作的引用运算符。

同样,作为方法调用中的调用者的裸词不需要引用,只要它们不是函数调用:

代码语言:javascript
复制
Foo->bar;    # 'Foo'->bar(); --- but only if no sub Foo exists
print->bar;  # print($_)->bar();

但是,一元负行为似乎是由于不断的折叠,而不是因为解析器中的特殊情况。例如,这段代码

代码语言:javascript
复制
use strict;
0 ? foo : bar;

只会抱怨不允许使用裸词"bar“,这意味着在解析和编译过程中,裸单词检查会发生得很晚。在一元减号的情况下,赤字已经被常量折叠成一个适当的字符串值,并且没有一个空字是可见的。

虽然这可以说是错误的,但如果不破坏向后兼容性,就不可能改变这种情况--许多模块(如use parent )都会使用这种行为来通信选项。在命令行接口上也比较类似的习惯用法,其中选项通常以破折号开头。

票数 5
EN

Stack Overflow用户

发布于 2018-12-10 14:40:29

来自perlop

符号一元算子

如果操作数是数字,则一元"-“执行算术否定,包括任何看起来像数字的字符串。如果操作数是标识符,则返回由与标识符连接的减号组成的字符串。否则,如果字符串以加号或减号开头,则返回以相反符号开头的字符串。这些规则的一个效果是,-bareword等同于字符串"-bareword“。但是,如果字符串以非字母字符(不包括"+“或"-")开头,Perl将尝试将字符串转换为数字,并执行算术否定。如果字符串不能清晰地转换为数字,Perl将给出警告参数"the string“不是否定(-) at .中的数字。

因此,由于Perl解析规则,-name被视为"-name“,即使在use strict下也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53707424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档