Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Strange interaction between print and the ternary conditional operator

by kcott (Bishop)
on Feb 20, 2020 at 07:22 UTC ( #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?

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2020-05-29 08:13 GMT
Find Nodes?
    Voting Booth?
    If programming languages were movie genres, Perl would be:

    Results (167 votes). Check out past polls.