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

2024-02-19

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 "}->"但第二次打印roed, gul and blaa正如预期的那样。这是编译器的弱点还是有一些我看不到的原因?我在 5.10、5.22 和 5.26 版本中测试并得到了此行为。


The {...} are 解释的 https://perldoc.perl.org/perlref.html#Making-References作为一个块,而不是哈希引用。我们可以通过添加一个来看到这一点+

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

现在它起作用了,因为接下来的unary + https://perldoc.perl.org/perlop.html#Symbolic-Unary-Operators必须是一个表达式;所以+消除代码的歧义。然后解释器继续将该构造识别为匿名哈希构造函数。

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

在另一个示例中,它是串联运算符 (.)就可以了。


对于一元的另一个例子+强制将以下代码处理为一种表达,有关相关文档的详细信息,请参见这个帖子 https://stackoverflow.com/a/56556921/4653379.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hashref 查找中的语法错误,看不出原因 的相关文章

随机推荐