为什么Perl抱怨“在void上下文中无用的常量”,但有时只是?

时间:2013-07-31 21:36:54

标签: perl constants void

这是我的Perl脚本及其输出:

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"

我希望每一行都有警告。 undef01有什么特别之处导致这种情况不会发生?

1 个答案:

答案 0 :(得分:13)

perldoc perldiag中记录完整的理由:

  

对于等于01的数值常数,不会发出此警告,因为它们通常用于

等语句中
1 while sub_with_side_effects();

对于undef,它是一个甚至在void上下文中使用的函数。例如undef($x)执行的操作类似于 - $x = undef();。 (您通常需要后者。)可以在void上下文中使用undef而不使用args发出警告,但它需要专门的代码,而且根本不需要。