Почему Perl жалуется на "бесполезное использование константы в пустотном контексте", но только иногда?
Вот мой Perl script и его вывод:
use strict;
use warnings;
(undef, 1); # no output
(0, 1); # no output
(1, 1); # no output
(2, 1); # "Useless use of a constant in void context at C:\...\void.pl line 7"
(3, 1); # "Useless use of a constant in void context at C:\...\void.pl line 8"
("", 1); # "Useless use of a constant in void context at C:\...\void.pl line 9"
("0", 1); # "Useless use of a constant in void context at C:\...\void.pl line 10"
("1", 1); # "Useless use of a constant in void context at C:\...\void.pl line 11"
Я бы ожидал предупреждения в каждой строке. Что особенного в undef
, 0
и 1
, из-за чего это не происходит?
Ответы
Ответ 1
Документировано в perldoc perldiag
с обоснованием:
Это предупреждение не будет выдано для числовых констант, равных 0
или 1
, поскольку они часто используются в таких выражениях, как
1 while sub_with_side_effects();
Что касается undef
, это функция, которая использует даже в контексте void. например undef($x)
делает что-то похожее на — но отличается от — $x = undef();
. (Обычно вы хотите использовать последнее.) Предупреждение может быть выдано для использования undef
без аргументов в контексте void, но для этого потребуется специализированный код, и он просто не нужен.