如何强制EXPR而不是GLOB取消引用?

Eug*_*kov 3 perl

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取消引用?

Dav*_*oss 5

一些选择。

明确告诉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)