繁体   English   中英

hashref 查找中的语法错误,看不出原因

[英]Syntax error in hashref lookup, can not see why

perl -E 'say for map s/(æ|ø|å)/   {qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
perl -E 'say for map s/(æ|ø|å)/"".{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'

上面的第一行在syntax error at -e line 1, near "}->"给了我syntax error at -e line 1, near "}->"但第二blaa按预期打印了roedgulblaa 这是编译器的弱点还是我看不到的原因? 我在 5.10、5.22 和 5.26 版本中测试并得到了这种行为。

{...}解释为 BLOCK,而不是 hashref。 我们可以通过添加+来查看这一点

perl -E'say for map s/(æ|ø|å)/+{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'

现在它起作用了,因为 一元+后面必须是一个表达式; 所以+消除了代码的歧义。 然后解释器继续将该构造标识为匿名哈希构造函数。

否则它必须猜测{因为在决定它是解析块还是表达式之前它无法解析。 它可以分析上下文以确定{...}是什么,但如果这只是被认为过于复杂作为权衡,我会认为这是合理的。

在另一个示例中,连接运算符 ( . ) 执行此操作。


下面的代码作为表达式的一元+强制处理的另一个例子,以及有关相关文档的详细信息,请参阅此帖子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM