in reply to Strange interaction between print and the ternary conditional operator
G'day WingedKnight,
Welcome to the Monastery.
When in doubt, it's often a good idea to find out how Perl is seeing your code with B::Deparse.
$ perl -MO=Deparse,-p -e 'print "foo, " . (1 ? "yes" : "no") . " bar"; +' print('foo, yes bar'); -e syntax OK
$ perl -MO=Deparse,-p -e 'print (1 ? "yes" : "no") . " bar";' (print('yes') . ' bar'); -e syntax OK
"Why isn't " bar" getting appended to the output in the second case?"
Because it's getting appended to the return value from print.
$ perl -e '$x = print "foo, " . (1 ? "yes" : "no") . " bar"; print "\n +$x\n"' foo, yes bar 1
$ perl -e '$x = print (1 ? "yes" : "no") . " bar"; print "\n$x\n"' yes 1 bar
Of course, you should start all your code with:
use strict; use warnings;
In this case, you would have received warnings:
$ perl -e 'use strict; use warnings; 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
See "perlintro: Safety net".
— Ken
|
|---|