相关疑难解决方法(0)

关于优先级+重复修饰符的问题

请你能解释一下这种明显不一致的行为:

use strict;
my @a;

print "a" x 2; # this prints: aa
@a = "a" x 2; print @a; # this prints: aa

print ("a") x 2; # this prints: a
@a = ("a") x 2; print @a; # this prints: aa
Run Code Online (Sandbox Code Playgroud)

不应该最后一个打印一个'a'?

编辑:好的,现在这对我来说更有意义:"二进制"x"是重复运算符...在列表上下文中,如果左操作数括在括号中或者是由qw/STRING /形成的列表,它重复了这个清单." perlop得到

这对我来说很清楚(二进制x - 为什么使用二进制这个词?是否有一个否定X?)但无论如何:@a =("a")x 2#似乎在列表上下文中,因为我们有一个数组在开头 - 一个数组不是一个列表,但它包含一个列表,所以我认为我们可能有一个列表上下文,(虽然它们可能是同义词,但不是数组上下文).

我想"左操作数"是("a").(或者是那个或@a).perlop没有说明操作数实际上是什么,查询perldoc.perl.org给出"找不到匹配",谷歌搜索给出"在计算机编程中,操作数是用于描述任何能够被操纵的对象的术语".就像数组一样.

因此左操作数可能会括在括号中,所以它可能会"重复列表".该列表是:("a") x 2 或者是:("a")

如果我们重复,("a") x 2我们会得到("a") x 2 ("a") x 2.这似乎不对.

如果我们键入:print $a[1]我们将得到一个'a',所以"它重复列表"意味着Perl变成("a") …

perl operator-precedence

3
推荐指数
1
解决办法
259
查看次数

标签 统计

operator-precedence ×1

perl ×1