这个表达式的优先级是什么?

Eug*_*kov 1 perl perlop

当我运行这个程序时:

print(rand*100)
Run Code Online (Sandbox Code Playgroud)

我从[0,1)范围获得价值.

但为此:

print(100*rand)
Run Code Online (Sandbox Code Playgroud)

我从[0,100)范围获得价值.

什么是优先权?为什么第一个表达式不返回[0,100)范围的值?

ike*_*ami 6

rand 有两种语法:

  • rand
  • rand EXPR

如果后面的内容rand可以是表达式(EXPR)的开头,Perl假设您正在使用后一种形式.

*可以启动EXPR,因此rand*...被解析为rand EXPR.这意味着rand*100相当于rand(*100).

$ perl -MO=Deparse,-p -wle'print(rand*100)'
BEGIN { $^W = 1; }
BEGIN { $/ = "\n"; $\ = "\n"; }
print(rand(*100));
-e syntax OK

$ perl -wle'print(rand*100)'
Argument "*main::100" isn't numeric in rand at -e line 1.
0.57355563536203
Run Code Online (Sandbox Code Playgroud)