Как заставить EXPR вместо разыменования GLOB? - PullRequest
3 голосов
/ 14 октября 2019
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 разыменования?

1 Ответ

5 голосов
/ 14 октября 2019

Несколько вариантов.

Явно скажите Perl, что вы не передаете параметры в XX.

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

Используйте соглашения о вызовах в старом стиле для подпрограмм (я действительно неНе рекомендую этот).

my $z =  -&XX * $rnd;

Определите подпрограмму как не принимающую параметры.

sub XX() { 30 };

Но лучшее решение - использовать встроенный constant Прагма.

use constant XX => 30;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...