Давайте сделаем это, но на самом деле - то есть с предупреждениями на
perl -we'print (1 ? "yes" : "no") . " bar"'
Он печатает
print (...) interpreted as function at -e line 1.
Useless use of concatenation (.) or string in void context at -e line 1.
yes
(но без перевода строки в конце)
Так как (1 ? "yes" : "no")
принимается в качестве списка аргументов для функции print
, то троичное число оценивается как yes
, и это аргумент для print
, и, таким образом, один распечатаны. Поскольку это известная «ошибка», которая может быть легко сделана по ошибке, мы любезно получаем предупреждение за нее.
Затем строка " bar"
объединяется (с возвращаемым значением print
, которое это 1
), что бессмысленно в пустом контексте, и за что мы также получаем предупреждение.
Один из обходных путей - добавить +
, заставляя интерпретировать ()
как выражение
perl -we'print +(1 ? "yes" : "no") . " bar", "\n"'
Или, правильно вызвать print
как функцию, с круглыми скобками
perl -we'print( (1 ? "yes" : "no") . " bar", "\n" )'
, где я добавил символ новой строки в обоих случаях.
См. этот пост для подробного обсуждения связанного примера и точных ссылок на документацию.