use strict;
use warnings;
sub XX { 30 };
my $rnd = 3;
my $z = -XX * $rnd;
Run Code Online (Sandbox Code Playgroud)
给出错误: Can't use string ("3") as a symbol ref while "strict refs" in use
这无济于事:
my $z = -XX * ($rnd);
Run Code Online (Sandbox Code Playgroud)
我收到下一个错误:
Scalar found where operator expected at game4.pl line 7, near "* ($rnd"
(Missing operator before $rnd?)
syntax error at game4.pl line 7, near "* ($rnd"
Execution of game4.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
如何强制EXPR
而不是GLOB
取消引用?
一些选择。
明确告诉Perl您没有将参数传递给XX
。
my $z = -XX() * $rnd;
Run Code Online (Sandbox Code Playgroud)
对子例程使用旧式的调用约定(我真的不推荐使用此例程)。
my $z = -&XX * $rnd;
Run Code Online (Sandbox Code Playgroud)
将子例程定义为不接受参数。
sub XX() { 30 };
Run Code Online (Sandbox Code Playgroud)
但是最好的解决方案是使用内置的constant
编译指示。
use constant XX => 30;
Run Code Online (Sandbox Code Playgroud)