use strict;
use warnings;

sub XX { 30 };

my $rnd =  3;
my $z =  -XX * $rnd;


给出错误:Can't use string ("3") as a symbol ref while "strict refs" in use
这没有帮助:
my $z =  -XX * ($rnd);

我得到下一个错误:
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.

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

最佳答案

几个选项。

明确告诉 Perl 您没有将参数传递给 XX

my $z =  -XX() * $rnd;

对子程序使用旧式调用约定(我真的不推荐这个)。
my $z =  -&XX * $rnd;

将子程序定义为不带参数。
sub XX() { 30 };

但最好的解决方案是使用内置的 constant pragma。
use constant XX => 30;

关于perl - 如何强制 EXPR 而不是 GLOB 取消引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58376080/

10-12 19:08