Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Strange interaction between print and the ternary conditional operator

by kcott (Archbishop)
on Feb 20, 2020 at 07:22 UTC ( [id://11113231]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11113231]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (7)
As of 2024-04-23 17:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found