Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

ternary operator

by Anonymous Monk
on Jan 18, 2013 at 06:27 UTC ( #1013961=perlquestion: print w/replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

 $a1=2; $b1=10; (defined($a1 > $b1)) ? ($int = ($a1/$b1)) : ($int = ($b1/$a1)); print $int;

wats wrong with this code?

Replies are listed 'Best First'.
Re: ternary operator
by tmharish (Friar) on Jan 18, 2013 at 06:55 UTC
    Short Answer:
    $a1=2; $b1=10; ($a1 > $b1) ? ($int = ($a1/$b1)) : ($int = ($b1/$a1)); +print $int;
    Better Short Answer:
    $a1=2; $b1=10; $int = ($a1 > $b1) ? ($a1/$b1) : ($b1/$a1); print $int;
    What it should really be:
    use strict ; use warnings ; # Use Better Variable Names. my $a1 = 2 ; my $b1 = 10 ; my $int = ( $a1 > $b1 ) ? ( $a1 / $b1 ) : ( $b1 / $a1 ) ; print $int;

    defined($int = ($a1/$b1)) will always evaluate to true regardless of the values of $a1 and $b1. If you want to check if both $a1 and $b1 are defined you might want to nest it in there like:
    my $int = ( defined( $a1 ) and defined( $b1 ) ) ? ( ( $a1 > $b1 ) ? ( +$a1 / $b1 ) : ( $b1 / $a1 ) ) : die( '$a1 and $b1 need to be defined' + ) ;
    The other thing to note is that the the Ternary Operator, being an Operator, will return something and so you dont need to do the $int = in both the if and else parts.
      Besides checking whether $a1 and $b1 are defined, you'd probably also want to verify that the the smaller value is != 0. By now, we are definitely at the point where insisting on using the ternary operator causes needless issues with readability.
Re: ternary operator
by davido (Archbishop) on Jan 18, 2013 at 06:54 UTC

    Obviously, it's not using strict. ;)


Re: ternary operator
by BrowserUk (Pope) on Jan 18, 2013 at 06:44 UTC


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
Re: ternary operator
by AnomalousMonk (Chancellor) on Jan 18, 2013 at 09:39 UTC

    Not enough parentheses.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1013961]
Approved by baxy77bax
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (5)
As of 2017-09-21 10:48 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (245 votes). Check out past polls.