Почему 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, но для этого потребуется специализированный код, и он просто не нужен.