in reply to Re^2: Complex conditional statements
in thread Complex conditional statements
not B and print("...")
Unlike C, every Perl function can be used in an expression, even those that don't normally return a value. But that's moot since print actually does return a value: true on success, false (and sets $!) otherwise.
Keep in mind that using these techniques is almost guaranteed to make your code less readable or unreadable. For expressions of that magnitude, I encourage you to treat this discussion as an academic excercise.
Update: Answer to Updated question:
($a = 3 and print "--> $a\n") if ($comment or $test) or print "no way!";
is the same as
($a = 3 and print "--> $a\n") if ($comment or $test or print "no way!");
Keep in mind that print pretty much always returns true, so the above doesn't do what you want. You could fix it by changing the return value of print:
($a = 3 and print "--> $a\n") if ($comment or $test) or (print("no way!"), 0);
But that's aweful code! What's wrong with
if ($comment or $test) { $a = 3; print "--> $a\n"; } else { print "no way!\n"; }
You could shorten it a little to
$comment or $test ? ( $a = 3, print "--> $a\n" ) : print "no way!\n";
but you're starting to mess with people's ability to read your code if you do that.
|
|---|