你没有做你认为你正在做的事情。这两种说法:
print none + 1
print 1 + none
并不像你想象的那么简单。因为您关闭了警告,所以您不知道它们的作用。让我们在命令提示符下尝试一下,打开警告(-w
开关):
$ perl -lwe'print none + 1'
Unquoted string "none" may clash with future reserved word at -e line 1.
Name "main::none" used only once: possible typo at -e line 1.
print() on unopened filehandle none at -e line 1.
$ perl -lwe'print 1 + none'
Unquoted string "none" may clash with future reserved word at -e line 1.
Argument "none" isn't numeric in addition (+) at -e line 1.
1
在第一种情况下,none
是一个裸字,被解释为一个文件句柄,并且 print 语句失败,因为我们从未打开具有该名称的文件句柄。在第二种情况下,裸字none
被解释为一个字符串,它被加法运算符转换为一个数字+
,这个数字将是零0
。
您可以通过为第一种情况提供特定的文件句柄来进一步澄清这一点:
$ perl -lwe'print STDOUT none + 1'
Unquoted string "none" may clash with future reserved word at -e line 1.
Argument "none" isn't numeric in addition (+) at -e line 1.
1
none + 1
这表明和之间没有真正的区别1 + none
。