这个表达式的优先级是什么?
What is precedence in this expression?
当我运行这个程序时:
print(rand*100)
我从 [0,1)
范围内获取值。
但是对于这个:
print(100*rand)
我从 [0,100)
范围内获取值。
这里的优先级是什么?以及为什么第一个表达式没有 [0,100)
范围内的 return 值?
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
您始终可以使用 B::Deparse 查看 Perl 如何解析表达式。
$ perl -MO=Deparse -e'print(100*rand)'
print 100 * (rand);
-e syntax OK
$ perl -MO=Deparse -e'print(rand*100)'
print rand *100;
-e syntax OK
当我运行这个程序时:
print(rand*100)
我从 [0,1)
范围内获取值。
但是对于这个:
print(100*rand)
我从 [0,100)
范围内获取值。
这里的优先级是什么?以及为什么第一个表达式没有 [0,100)
范围内的 return 值?
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
您始终可以使用 B::Deparse 查看 Perl 如何解析表达式。
$ perl -MO=Deparse -e'print(100*rand)'
print 100 * (rand);
-e syntax OK
$ perl -MO=Deparse -e'print(rand*100)'
print rand *100;
-e syntax OK